F#语法解释(^)

3
抱歉标题写得不好。考虑以下函数:
let inline getName arg =
    ( ^a : (member Name : string) arg)

我知道它是干什么的,但只是因为我复制粘贴了它。它的意思是:给定一个arg,返回argname成员。然而,我不理解第一部分的^a,也不理解:(member Name: string)。我只知道最后一个arg应用了^a :(member Name : string)函数中的arg值。
1个回答

9
^用于指定type parameter is statically resolved|类型参数在编译时确定,这意味着类型将在编译时解析而非运行时。
第二部分是一个generic constraint|泛型约束,它指定该类型必须具有名为Name的成员并符合给定签名,本例中是一个字符串属性。您展示的语法是实际调用成员的方式,编译器推断函数的泛型约束,但您也可以明确指定约束,尽管没有必要。
let inline getName (arg : ^a when ^a : (member Name : string)) =
    ( ^a : (member Name : string) arg)

1
请明确一点: ^a : (member Name : string) 基本上是一个函数,用于返回参数 argName 成员吗? - N_A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接