App
까지 확장되는 객체에서 약간의 bizzar 동작이 발생했습니다. 다음 REPL 명령을 살펴보십시오.응용 프로그램을 확장하는 객체를로드 할 때 스칼라에서 어떤 일이 발생합니까?
scala> object A extends App {val x = "I am null"}
defined module A
scala> object B {val x = "I am a string"}
defined module B
scala> A.x
res0: java.lang.String = null
scala> B.x
res1: java.lang.String = I am a string
글쎄, 조금 이상합니다 ...하지만 이상하게 들립니다. 그때 나는 그래서 실제 lazy val
을 시도 ... object
의 애송이들이다 일부 게으른 평가로 갈 생각 :
scala> object C extends App {lazy val x = "What am I?"}
defined module C
scala> C.x
res2: java.lang.String = What am I?
그래서 여기에 무슨 일이 일어나고 있는지? 정규 val이 null 값을 얻는 이유는 무엇입니까?
lazy val
을 사용할 때 왜이 동작이 변경됩니까?
및 App
특성이 매우 특별한 이유는 일반 값을 평가하지 않기 위해서입니까?