F#语法解释(^)

时间:2014-01-15 13:29:25

标签: syntax f#

好吧,抱歉这个糟糕的头衔。

考虑以下功能:

let inline getName arg =
    ( ^a : (member Name : string) arg)

我知道它的作用,但我知道这只是因为我复制粘贴它。

它说:给arg name成员arg

但是,我没有得到第一部分^a,也没有得到: (member Name : string)

我所知道的是,最后一个arg正在应用arg函数的^a : (member Name : string)值。

1 个答案:

答案 0 :(得分:9)

^用于指定type parameter is statically resolved,这意味着该类型将在编译时解析,而不是在运行时解析。

第二部分是generic constraint,它指定该类型必须具有名为Name的成员,并且具有给定的签名,在本例中为字符串属性。您展示的语法是如何实际调用该成员,并且编译器正在推断该函数的泛型约束,但您也可以明确指定约束,尽管没有必要。

let inline getName (arg : ^a when ^a : (member Name : string)) =
    ( ^a : (member Name : string) arg)