Syntax 语法解释(^)

Syntax 语法解释(^),syntax,f#,Syntax,F#,好吧,很抱歉标题不好 考虑以下功能: let inline getName arg = ( ^a : (member Name : string) arg) 我知道它是做什么的,但我知道这只是因为我复制粘贴了它 它说:给定一个arg返回arg的name成员 但是,我没有得到第一部分^a,也没有得到:(成员名称:string) 我只知道最后一个arg正在应用^a:(成员名称:string)函数的arg值。使用^指定,这意味着类型将在编译时解析,而不是在运行时解析 第二部分是指定类型必须有

好吧,很抱歉标题不好

考虑以下功能:

let inline getName arg =
    ( ^a : (member Name : string) arg)
我知道它是做什么的,但我知道这只是因为我复制粘贴了它

它说:给定一个
arg
返回
arg
name
成员

但是,我没有得到第一部分
^a
,也没有得到
:(成员名称:string)


我只知道最后一个
arg
正在应用
^a:(成员名称:string)
函数的
arg
值。

使用
^
指定,这意味着类型将在编译时解析,而不是在运行时解析

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

let inline getName (arg : ^a when ^a : (member Name : string)) =
    ( ^a : (member Name : string) arg)
需要说明的是:
^a:(成员名称:字符串)
基本上是一个函数,它返回参数
arg
Name
成员?