TestTrait1과 TestTrait의 두 가지 특성을 고려하여 NewObject가 두 가지를 모두 확장한다고 가정합니다. TestTrait에서 TestTrait1의 변수를 사용하는 것이 좋습니다. 아래 코드는 완벽하게 작동합니다.스칼라 - 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]3560
이제 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