假设我在特征中定义了一些抽象值字段:
trait Base {
val toBeOverride: String
}
case class Impl(other:Int) extends Base {
override val toBeOverride = "some value"
}
我怎样才能编写一个函数,我可以轻松地获得一个克隆实例,只覆盖该toBeOverride
值,如下所示:
// copy only available to case class instance
// v does not have method 'copy'
def overrideBaseValue[T <: Base](v: Base) =
v.copy(toBeOverride = "prefix" + v.toBeOverride)
?
编辑
@som-snytt,我不认为这是重复的,就像 a 与 aTrait
不同一样Abstract Class
。这个问题的答案并不让我满意,见下文。
@Blaisorblade,是的,这是个问题。对于每个子案例类的实例,toBeOverride
字段是相同的,所以它不应该出现在构造函数中。
目前所有的建议都是copy
在每个(!)子案例类中定义一个自定义方法,在我看来这很丑陋并且显示了该语言的无能。