の延長を評価するとき、私はこのようになります特色があります。で、しかし予期しない動作密閉された形質
object MyObject {
sealed trait c extends MyTrait {
val myItem: String
val description: String = s"$myItem"
}
object c1 extends c {
val myItem: String = "One"
}
object c2 extends c {
val myItem: String = "Two"
}
}
:私はその形質を呼び出して、次のを持っている別のオブジェクトで
trait MyTrait {
val description: String
}
を実行時間、I c1.description
およびc2.description
は両方ともヌルオブジェクトです。私がこのようなコードをリファクタリングすると、予期した結果が得られます。
object MyObject {
sealed trait c extends MyTrait {
val myItem: String
}
object c1 extends c {
val myItem: String = "One"
val description = s"$myItem"
}
object c2 extends c {
val myItem: String = "Two"
val description = s"$myItem"
}
}
誰でもこの動作を説明できますか?
'c#myItem'を' def'に変更しても何も変更されないことに注意してください。 'c1'と' c2'の実装を変更する必要があります。 –
'lazy val'を使うと問題が解決しました。 – franklin