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