【发布时间】:2012-10-05 16:20:05
【问题描述】:
假设我有一个 Scala 案例类,如下所示:
case class Item(
roundedValue: Double = 0.00)
我想在每次更新变量时对 roundedValue 进行如下舍入操作:
roundedValue = math.round(roundedValue*100)*0.01
在其他语言中,我只会覆盖 roundedValue 的 setter,但似乎我无法覆盖 case 类变量的 setter,否则它将无法编译。
我见过的一个解决方案是将roundedValue重命名为_roundedValue并使其私有,然后添加公共方法来模拟getter和setter(带有舍入逻辑):Overriding setter on var
但是,当使用命名参数时,这使得 case 类的构造函数使用非常尴尬。有没有其他方法可以做到这一点,或者这是 Scala 中案例类的限制?
【问题讨论】:
-
首先case类默认是不可变的,因此没有setter。
-
这是有道理的,考虑到我在尝试实际执行此操作时遇到“重新分配给 val”编译错误。
-
默认 roundedValue 是 case 类中的 val。但是,您可以将案例类声明为:case class Item(var roundedValue: Double = 0.00) 并且变量将是可变的。
-
谢谢@jcern 我没有意识到这是可能的。
-
如果你需要改变
Item的状态,你可能不想让它成为一个case类。
标签: scala