好的,那么有人可以解释一下为什么 F# 允许你重载 > 和 ^ 操作符,但不允许你使用它们吗?
+ (op_Addition): Works just fine.
^ (op_Concatenate): Compiler error in F#. Apparently only strings can be concatenated.
> (op_GreaterThan): Runtime Error – Failure during generic comparison: the type Program+OppTest4 does not implement the System.IComparable interface.
如果我将我的F#代码编译为库并从VB中使用这些运算符,它们都可以正常工作。如果我从C#中使用这些运算符,除了op_Concatenate之外,其他都不起作用(如预期的那样)。但是F#不仅忽略了其中一些,而且静态类型检查器甚至不会告诉您它计划这样做。
type OppTest4(value: int) =
member this.value = value
static member (^) (left : OppTest4, right : OppTest4) =
OppTest4( Int32.Parse( left.value.ToString() ^ right.value.ToString() ))
static member (+) (left : OppTest4, right : OppTest4) =
OppTest4(left.value + right.value )
static member (>) (left : OppTest4, right : OppTest4) =
left.value > right.value
static member (<) (left : OppTest4, right : OppTest4) =
left.value < right.value