是否可以在F#中为C#相等(==)运算符提供实现?
编辑:
此代码:
static member (=) (left : Foo, right : Foo) =
生成编译器警告:
The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
后一部分解决了我试图做的事情。知道为什么op_Equality
比(=)
更受青睐?
答案 0 :(得分:8)
想出来:
type Foo() =
static member op_Equality (left : Foo, right : Foo) =
答案 1 :(得分:3)
您在寻找operator overloading in F#吗?
在CIL中定义了不同的运算符,因此在F#中加载运算符的重载会使它在C#,VB.NET和支持该运算符的任何其他.NET语言中超载。
答案 2 :(得分:2)
据推测,op_Equality
比(=)
更受青睐,因为后者看起来好像应该影响F#中的相等运算符。也就是说,以下代码的行为可能会令人困惑:
type T() =
static member (=)(x:T,y:T) = true
let eq = (=) (T()) (T()) // false???