【发布时间】:2016-10-07 02:06:21
【问题描述】:
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))会报空指针异常?
编辑:
此代码位于 App 类中。似乎 vals 在评估 instance.main(...) 之前没有初始化。我假设lazy vals 的实现是不同的。
【问题讨论】:
-
我在 fibs2 评估上没有任何 NPE
-
这里一样,我在 repl 上运行时没有 NPE
标签: scala nullpointerexception lazy-sequences