【问题标题】:Please explain this syntax请解释一下这个语法
【发布时间】:2016-04-04 07:02:14
【问题描述】:

来自answer by kvb关于如何调用隐式转换运算符:

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

我知道 F# 有一段时间了,但我只是不知道如何解析这里的实现。 (^a or ^b) 是什么?那之后的事情呢?请复习一下每个部分在语法上的含义。

【问题讨论】:

标签: f#


【解决方案1】:

^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

【讨论】:

    猜你喜欢
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2013-03-19
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2014-04-04
    相关资源
    最近更新 更多