请解释一下这个语法

Asi*_*sik 2 f#

kvb关于如何调用隐式转换运算符的回答:

let inline (!>) (x:^a) : ^b = ((^a or ^b) : (static member op_Implicit : ^a -> ^b) x)
Run Code Online (Sandbox Code Playgroud)

我已经知道F#了一段时间,但我不知道如何解析这里的实现.什么是(^a or ^b)?之后的东西?请仔细阅读每个部分所代表的内容.

Fyo*_*kin 7

^a or ^b字面意思是" ^a^b".

冒号:意味着"有"或"包含",取决于你如何看待它.

所以整个表达式(^a or ^b) : (static member op_Implicit : ^a -> ^b)意味着"名为"的静态成员op_Implicit"具有类型^a -> ^b并且在任何类型^a或类型上定义^b".整个表达式最终评估为类型的函数^a -> ^b.

然后,x放置在该表达式右侧意味着"函数应用程序",就像通常的F#语法一样.

所以整个过程一起意味着"在类型^a或类型上^b,找到一个名为"op_Implicit"的静态成员,它具有类型^a -> ^b,并将该成员应用于参数x".

有关静态解析约束的更多讨论,请参阅此答案此MSDN文章.