假设我有一个Scala案例类,如下所示:
case class Item(
roundedValue: Double = 0.00)
我想在每次更新变量时对roundedValue执行以下舍入操作:
roundedValue = math.round(roundedValue*100)*0.01
在其他语言中,我只是覆盖roundValue的setter,但似乎我不能覆盖case类变量的setter,否则它将无法编译。
我看到的一个解决方案是将roundedValue重命名为_roundedValue并将其设为私有,然后添加公共方法来模拟getter和setter(使用舍入逻辑):Overriding setter on var
然而,当使用命名参数时,这使得构造函数的使用对于case类非常尴尬。有没有其他方法可以做到这一点,或者这是Scala案例类的限制?
答案 0 :(得分: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)
}