CustomEquality和CustomComparison的值

时间:2013-05-16 18:24:08

标签: f# comparison equality typeclass

我理解断言的价值

[<StructuralEquality;StructuralComparison>]

这种静态强制相等和比较约束在结构上得出,如果它不能

则有一个很好的副作用来警告

类似地[<ReferenceEquality>]强制使用引用来满足相等约束。

最后NoComparison, NoEquality静态地不满足这些约束条件,同时也可以捕获错误。

但我不确定CustomEquality, CustomComparison的附加值是什么。

静态声明你会做一些自定义的东西有什么附加价值?

1 个答案:

答案 0 :(得分:2)

如果您有记录或联合类型,则需要使用

[<CustomEquality>][<CustomComparison>],并且需要为其定义一些非引用,非结构相等。 F#编译器通常会自动为这些类型生成相等和比较函数,因此这些属性告诉编译器不要生成这些函数,而是使用自定义方法。

如果您有一个表示数据库行的记录类型,并且(无论出于何种原因)您希望将类型的两个实例定义为相等(如果它们具有相同的主键值)(例如, CustomerId) - 即使它们包含的其他数据不同。