考虑一个代码段
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变量?
答案 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)