[英]F# syntax explanation (^)
好吧,抱歉糟糕的頭銜。
考慮以下功能:
let inline getName arg =
( ^a : (member Name : string) arg)
我知道它的作用,但我知道這只是因為我復制粘貼它。
它說:給予arg
返回name
成員arg
。
但是我沒有得到第一部分^a
,也沒有得到: (member Name : string)
。
我所知道的是,最后一個arg
正在應用^a : (member Name : string)
函數的arg
值。
^
用於指定類型參數是靜態解析的 ,這意味着類型將在編譯時解析,而不是在運行時解析。
第二部分是一個通用約束 ,它指定該類型必須具有名為Name
的成員,該成員具有給定簽名,在本例中為字符串屬性。 您顯示的語法是如何實際調用該成員,並且編譯器正在推斷該函數的泛型約束,但您也可以明確指定約束,盡管不需要。
let inline getName (arg : ^a when ^a : (member Name : string)) =
( ^a : (member Name : string) arg)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.