2012-03-02 54 views
3

似乎必須重寫Equality以覆蓋比較。自定義比較和fsharp中的相等性

這是真的嗎?我有什麼理由失蹤?

+2

請參閱[Don Syme的博客](http://blogs.msdn.com/b/dsyme/archive/2009/11/08/equality-and-comparison-constraints-in-f-1-9-7。 ASPX)。 – Daniel 2012-03-02 16:39:24

回答

5

號是可能的只有自定義比較

[<CustomComparison>] 
[<StructuralEquality>] 
type Node = 
    | Data of string 
    | Nil 

    with 

    interface System.IComparable with 
     member x.CompareTo y = 0 

不過請注意,這個代碼將產生您實現的類型平等以及警告recomending。這通常是一個好主意。如果你經歷了執行比較的麻煩,那麼直接相等(比較== 0)。

+0

我不知道爲什麼,我的VS顯示錯誤。這可能只是類型推斷的緩慢...... – nicolas 2012-03-02 16:44:55

+0

謝謝。至少我現在確信它。 – nicolas 2012-03-02 16:45:13

+0

@nicolas VS將在'Node'的定義上使用紅色下劃線。但這只是一個警告,而不是一個錯誤。恕我直言,他們可能使用了錯誤的顏色 – JaredPar 2012-03-02 16:46:00