gpt4 book ai didi

scala - 等于具有浮点字段的 case 类

转载 作者:行者123 更新时间:2023-12-01 08:32:25 26 4
gpt4 key购买 nike

是否可以创建带有浮点字段的案例类,例如:

case class SomeClass(a:Double, b:Double) 

我猜在这种情况下自动生成的相等方法不起作用。
覆盖等于最佳解决方案吗?

编辑:

如果覆盖等于是要走的路,我想避免硬编码 epsilon (其中 epsilon 定义为 => |this.a-a|< epsilon)。这不会编译:
case class SomeClass(a:Double, b:Double, implicit epsilon:Double)  

我正在寻找一种方法来传递 epsilon 而不每次都传递音乐会值(value)
(一些“隐式”魔法)。

我还跟进了更一般的问题,您将如何为只有浮点字段的类定义哈希码?

最佳答案

你是对的。如果您担心精度,那么您将需要覆盖 equals:

case class SomeClass(a:Double, b:Double)
SomeClass(2.2 * 3, 1.0) == SomeClass(6.6, 1.0)
// res0: Boolean = false

case class BetterClass(a: Double, b: Double) {
override def equals(obj: Any) = obj match {
case x: BetterClass =>
(this.a - x.a).abs < 0.0001 && (this.b - x.b).abs < 0.0001
case _ => false
}
}
BetterClass(2.2 * 3, 1.0) == BetterClass(6.6, 1.0)
// res1: Boolean = true

关于scala - 等于具有浮点字段的 case 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17118869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com