2
从answer by kvb关于如何调用隐式转换操作符:请解释这个语法
let inline (!>) (x:^a) : ^b = ((^a or ^b) : (static member op_Implicit : ^a -> ^b) x)
我知道F#一段时间,但我只是不知道如何解析在这里实施。什么是(^a or ^b)
?那之后的东西?请从各个部分的语法上进行说明。
从answer by kvb关于如何调用隐式转换操作符:请解释这个语法
let inline (!>) (x:^a) : ^b = ((^a or ^b) : (static member op_Implicit : ^a -> ^b) x)
我知道F#一段时间,但我只是不知道如何解析在这里实施。什么是(^a or ^b)
?那之后的东西?请从各个部分的语法上进行说明。
^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
”。
有关静态解析约束的更多讨论,请参阅this answer或this MSDN article。
一定会在某处出现重复 - 请参阅文档https://msdn.microsoft.com/zh-cn/library/dd548046.aspx –
文档解释了约束,但不解释此处显示的函数调用。 – Asik