在派生类中重用基类中的变量:Scala

时间:2015-06-11 09:29:46

标签: scala inheritance

考虑一个代码段

trait MyTrait{
val x: Int = 0
}
case class MyClass(y: Int = 1, z: Int = 2) extends MyTrait
//script starts now
val myClass = MyClass(3,4)
myClass.copy(x, 5)

为什么这不起作用?它表示未定义的变量x。我知道它可以写成

case class MyClass(override val x:Int = 0, y: Int = 1, z: Int = 2) extends MyTrait

但我想知道为什么我不能使用默认值?

  

修改

在这种情况下,是否无法设置MyTrait的x变量?

2 个答案:

答案 0 :(得分:3)

执行x时,

myClass.copy(x, 5)不在范围内。您已在特征中定义了x,但您在表达式x中输入的myClass.copy(x,5)与特征内的x不同。因此,编译器抱怨未在x中找到值myClass.copy(x,5)

答案 1 :(得分:1)

没有x,只有x特质成员MyTrait(以及您的班级MyClass)。

所以这可能会做你想要的:

myClass.copy(myClass.x, 5)