2016-10-07 12 views
0
def fix[A, B](fn : Function2[Function1[A, B], A, B]) : Function1[A, B] = 
    (x : A) => fn(fix(fn), x) 

    lazy val fibs1 = fix[(Int, Int), Stream[Int]](
    (fn, a) => a._1 #:: fn((a._2, a._1 + a._2)) 
) 

    val fibs2 = fix[(Int, Int), Stream[Int]](
    (fn, a) => a._1 #:: fn((a._2, a._1 + a._2)) 
) 

Scalaを学んでいるうちに、私は奇妙なエラーに遭遇しました。なぜfibs1((1,1))はエラーを生成しませんが、fibs2((1, 1))はNULLポインタ例外を与えますか?Scala NullPointerExceptionが発生しない限り

編集:

このコードはAppクラス内にあります。 instance.main(...)が評価されるまで、valは初期化されていないようです。私はlazy valの実装が異なると仮定します。

+0

fibs2にNPE評価 – Nyavro

+0

ここに同じですが、レプリケート時にNPEを実行しても –

答えて

0

あなたは正しいです。いくつかのvalは初期化されていませんが、あなたがそれを怠惰なvalにしたので、必要なときだけ評価され、その時点では制御していないコードによって初期化されていました

関連する問題