有没有办法影响F#编译器为结构相等生成的代码?

时间:2015-03-11 15:09:37

标签: .net f# record floating-point-precision structural-equality

这是一个具体的例子。 我有一个带有浮点字段的记录类型,我希望能够比较这种类型的实例是否相等,但当然结构相等和比较的默认编译器生成的实现并不能解释浮点不精确,所以你可以在比较中得到误报和否定。

在我的应用程序中,我有很多记录,每个记录都包含许多浮点字段。 如果我能打出一个精确的数字"那会更好。我的浮点字段或整个记录上的属性,告诉编译器使用那么多精度数字来比较浮点值的相等性。 我可以覆盖Equals,GetHashCode和IComparable.CompareTo,但是打字很多,维护负担很重。

我想另一个选项是代码生成器工具,为我吐出所有这些覆盖。

1 个答案:

答案 0 :(得分:2)

检查了F#源代码,据我所知,这是不受支持的。

如果你想刺戳它,那里就会发生魔力:

https://github.com/Microsoft/visualfsharp/blob/fsharp4/src/fsharp/augment.fs