4

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

在我的应用程序中,我有很多记录,每个记录都有很多浮点字段。如果我可以在我的浮点字段或整个记录上添加一个“精度位数”属性,这将是一件好事,以告诉编译器使用这么多位精度来比较浮点值是否相等。我可以覆盖 Equals、GetHashCode 和 IComparable.CompareTo,但它需要大量的输入和繁重的维护负担。

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

4

1 回答 1

2

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

如果你想试一试,魔法就在这里发生:

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

于 2015-03-11T19:27:57.383 回答