0
是否有一個特定的原因,爲什麼重寫平等和比較運算符生成除bool以外的類型是如此困難。重載等式和比較運算符與非布爾返回類型
我在下面有一個解決方法,但爲什麼這種語言不會使這更容易做到?
我在這裏工作的是一個外部庫,這些操作符已經被重載了,我只是希望它們在F#中以相同的方式工作。爲了實現這一點,我不得不這樣做。
type ATArrayLT = ATArrayLT with
static member (?<-) (x:ATArray, ATArrayLT, y:int ) = ATArray.op_LessThan(x, float32 y)
static member (?<-) (y:int , ATArrayLT, x:ATArray) = ATArray.op_LessThan(x, float32 y)
static member (?<-) (x:ATArray, ATArrayLT, y:float32) = ATArray.op_LessThan(x, y)
static member (?<-) (y:float32, ATArrayLT, x:ATArray) = ATArray.op_LessThan(x, y)
static member (?<-) (x:ATArray, ATArrayLT, y:ATArray) = ATArray.op_LessThan(x, y)
static member inline (?<-) (x , ATArrayLT, y ) = x < y
let inline (<) x y = x ? (ATArrayLT) <- y
F#中所有類型的比較和相等不是結構化的 - 只有元組和「列表,選項,數組和用戶定義的記錄,聯合和結構類型的成員字段類型允許結構等同性,哈希和比較」。所以對於一個用戶定義的類,它*應該可以重載這些運算符。 – 2013-02-28 00:19:57
的確如此。我的觀點是,平等/比較在F#中有不同且明確的行爲。它們不像C#中那樣具有特殊的含義。他們可以在F#中進行自定義,但不在OP需要的範圍內。 – Daniel 2013-02-28 01:36:23
使用上述方法是否有風險? – Dave 2013-02-28 04:08:56