假设:
trait Foo {
var foo: Int
}
abstract class Bar(foo: Int) extends Foo
trait Baz {
self: Bar =>
foo = 4
}
我收到以下错误:
value foo in class Bar cannot be accessed in Baz with Bar
foo = 4
^
但是,如果我将Bar更改为以下内容:
abstract class Bar(_foo: Int) extends Foo {
foo = _foo
}
工作正常。有没有办法从构造函数中分配一个继承的字段?它几乎就像它正在影响它。
答案 0 :(得分:0)
您可以指定继承的字段。你只是有一个阴影问题(你怀疑)。以下工作(Foo
未更改):
abstract class Bar(_foo: Int) extends Foo
trait Baz {
self: Bar =>
foo = 4
}
请注意,_foo: Int
构造函数中的Bar
未定义字段foo
。但我们现在可以做到:
val x = new Bar(1) with Baz {
// need to define foo
var foo: Int = _
}
x.foo
//> res0: Int = 4
您可能希望查看early initializers的内容。