TestTrait1とTestTraitの2つの特性を考慮し、NewObjectが両方を拡張すると仮定します。 TestTraitのTestTrait1で変数を使用することです。以下のコードは完璧に動作します。Scala - App traitを使用した複数の継承
scala> trait TestTrait1 {
| val arguments1: Array[String] = Array("1","2")
| }
defined trait TestTrait1
scala> trait TestTrait {
| val arguments: Array[String]
| val len = arguments.length
| }
defined trait TestTrait
scala> object NewObject extends TestTrait1 with TestTrait {
| lazy val arguments = arguments1
| }
defined object NewObject
scala> NewObject
res30: NewObject.type = [email protected]
今すぐTestTrait1をAppに置き換えてください。引数は遅延評価のために設定されているので、私はDelayedInitの場合でも以下のコードが動作すると仮定します。
scala> object NewObject extends App with TestTrait {
| lazy val arguments = args
| }
しかし、そうではありません。これの背後にある理由は何ですか?
scala> NewObject
java.lang.NullPointerException
at TestTrait$class.$init$(<console>:12)
... 35 elided
この場合、TestTraitと同様の別の特性でargsを使用するソリューションは何ですか?
これを同じ例で説明していただきありがとうございます。説明は理にかなっています。 – rashmina