を拡張するオブジェクトで、やや奇妙な動作に遭遇しましたApp
。次の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
まあ、これは少し奇妙です...しかし、それはより奇妙になります。object
それから私はいくつかの怠惰な評価に入るvalsを考えました...それで私は本物を試しましたlazy val
:
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