2016-04-03 77 views
2

answer by kvb关于如何调用隐式转换操作符:请解释这个语法

let inline (!>) (x:^a) : ^b = ((^a or ^b) : (static member op_Implicit : ^a -> ^b) x) 

我知道F#一段时间,但我只是不知道如何解析在这里实施。什么是(^a or ^b)?那之后的东西?请从各个部分的语法上进行说明。

+1

一定会在某处出现重复 - 请参阅文档https://msdn.microsoft.com/zh-cn/library/dd548046.aspx –

+0

文档解释了约束,但不解释此处显示的函数调用。 – Asik

回答

6

^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 answerthis MSDN article