1

我明白断言的价值

[<StructuralEquality;StructuralComparison>]

这静态地强制相等和比较约束在结构上派生,并且如果不能,则有一个很好的副作用来警告

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

最后NoComparison, NoEquality静态地不满足这些约束,也有利于捕获错误。

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

静态声明您将做一些自定义的附加值是什么?

4

1 回答 1

2

[<CustomEquality>][<CustomComparison>]当你有一个记录或联合类型并且你需要为它定义一些非引用、非结构等式时使用 and 。F# 编译器通常会自动为这些类型生成相等和比较函数,因此属性告诉编译器不要生成这些函数,而是使用您的自定义方法。

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

于 2013-05-16T20:00:51.287 回答