4
考慮兩個特性TestTrait1和TestTrait,並假設NewObject擴展了這兩個特性。 這個想法是在TestTrait中的TestTrait1中使用變量。下面的代碼工作得很好。Scala - 與App特性的多重繼承
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]
現在用App替換TestTrait1。由於參數設置爲懶惰評估,我將假定即使在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