これはおそらくJesse Eicharのブログ エントリでカバーされています。それでも、NPE が修正されるように遅延 val に頼らずに以下を修正する方法がわかりません。
与えられた
trait FooLike { def foo: String }
case class Foo(foo: String) extends FooLike
trait Sys {
type D <: FooLike
def bar: D
}
trait Confluent extends Sys {
type D = Foo
}
trait Mixin extends Sys {
val global = bar.foo
}
最初の試み:
class System1 extends Mixin with Confluent {
val bar = Foo("npe")
}
new System1 // boom!!
2 回目の試行、mixin の順序を変更
class System2 extends Confluent with Mixin {
val bar = Foo("npe")
}
new System2 // boom!!
現在、私は両方bar
をglobal
非常に頻繁に使用しているため、Scala (2.9.2) が初期化を正しく行わないという理由だけで、lazy-val 税を支払いたくありません。何をすべきか?