0

假设我有一个 Scala 案例类,如下所示:

case class Item(
  roundedValue: Double = 0.00)

每次更新变量时,我都想对 roundedValue 执行以下舍入操作:

roundedValue = math.round(roundedValue*100)*0.01

在其他语言中,我只会覆盖 roundedValue 的设置器,但似乎我无法覆盖案例类变量的设置器,否则它不会编译。

我见过的一种解决方案是将 roundedValue 重命名为 _roundedValue 并将其设为私有,然后添加公共方法来模拟 getter 和 setter(使用舍入逻辑):Overriding setter on var

然而,当使用命名参数时,这使得案例类的构造函数使用非常尴尬。有没有其他方法可以做到这一点,或者这是 Scala 中案例类的限制?

4

1 回答 1

1

如果你能让它工作,我建议保持你的案例类不可变,但制作一个“复制”方法,在新实例上执行你的突变。

case class Item(roundedValue: Double = 0.0) {
  def withValue(newValue: Double) = Item(math.round(newValue*100)*0.01)
}

您可能还/相反希望在伴随对象中具有类似的方法:

object Item {
  def withValue(value: Double) = Item(math.round(roundedValue*100)*0.01)
}
于 2012-10-05T21:10:41.287 回答