我有以下代码:
trait Vehicle{
val speed:Int
}
case class Car(speed: Int, color: String) extends Vehicle
case class Plane(speed: Int, numberOfEngines: Int) extends Vehicle
case class Storage(vehicle: Vehicle, size:Int)
当使用特征作为案例类的命名参数之一时,我失去了案例类的好处,例如复制方法。
所以,如果我想更新这样的车速:
val x = Storage(Car(100, "red"), 10)
x.copy(vehicle = x.vehicle.copy(speed = 30)) //this will not work.
这很明显。 事情是看起来这里的设计很糟糕,这就是为什么我以这个问题结束了。
有更好的方法对此进行建模吗?
答案 0 :(得分:1)
$ dehumanise 1000MiB 19Ki
1048576000
19456
方法是针对案例类而不是针对特征定义的。
由于特征也可以由普通类实现,因此无法保证copy()
的所有实现都具有复制方法。
您现在有两个选项
向Vehicle trait添加方法trait Vehicle
,因此每个subClass都将提供一个实现
或x.vehicle上的案例匹配并手动构建车辆实例。