1

主張することの価値を理解している

[<StructuralEquality;StructuralComparison>]

これにより、構造的に等価制約と比較制約が静的に強制され、それができない場合に警告する良い副作用があります。

同様に[<ReferenceEquality>] 、参照を使用して等価制約が満たされるように強制します。

LastNoComparison, NoEqualityはこれらの制約を静的に満たさず、エラーをキャッチするという利点もあります。

ただし、付加価値が何であるかはわかりませんCustomEquality, CustomComparison

カスタムを行うことを静的に宣言することの付加価値は何ですか?

4

1 に答える 1

2

[<CustomEquality>]レコード型または共用体型があり[<CustomComparison>]、それに対して非参照、非構造的な同等性を定義する必要がある場合に使用されます。通常、F# コンパイラは、これらの型の等値関数と比較関数を自動的に生成するため、属性は、これらの関数を生成するのではなく、代わりにカスタム メソッドを使用するようにコンパイラに指示します。

この例としては、データベースの行を表すレコード タイプがあり、(何らかの理由で) そのタイプの 2 つのインスタンスが同じ主キー値 (たとえばCustomerId)を持っている場合に等しいと定義したい場合があります。それらに含まれる残りのデータが異なっていても。

于 2013-05-16T20:00:51.287 に答える