0

鉴于:

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
}

它工作正常。有没有办法从构造函数分配一个继承的字段?它几乎似乎在遮蔽它。

4

1 回答 1

0

您可以分配继承的字段。你只是有一个阴影问题(正如你所怀疑的那样)。以下作品(Foo未更改):

abstract class Bar(_foo: Int) extends Foo

trait Baz {
  self: Bar =>

  foo = 4
}

注意_foo: IntinBar的构造函数没有定义字段foo。但我们现在可以这样做:

val x = new Bar(1) with Baz {
  // need to define foo
  var foo: Int = _
}

x.foo
//> res0: Int = 4

你可能想看看你所做的早期初始化程序。

于 2013-06-25T19:59:17.683 回答