【发布时间】:2016-06-02 15:28:17
【问题描述】:
我在 C# 中定义了一个类型,如下所示:
struct F {
public static explicit operator F(long value) {}
public static explicit operator long(F value) {}
public static explicit operator F(double value) {}
public static explicit operator double(F value) {}
// more conversion operators
}
在 F# 中,如果我想从 long 创建它,我发现的唯一方法是:
let l = F.op_Explicit 3L
我尝试创建一个内联函数来使它更好:
let inline f a = F.op_Explicit a
但这不能编译。我还尝试了成员约束:
let inline f (x:^a) = (F: (static member op_Explicit : ^a -> F) x)
这也不编译。
是否可以定义一个函数或运算符来选择正确的重载?
顺便说一句,它确实在相反的方向上很好地工作:
let f = someF |> int64 // calls the right conversion operator
【问题讨论】:
标签: f#