【发布时间】:2017-04-21 05:56:50
【问题描述】:
我在 Meta PPCG 上的 proud haskeller this answer 中看到了 Haskell 的这个 sn-p:
x=2:x
我想,“等等,我可以在 Scala 中做到这一点!”所以我尝试了:
lazy val x: List[Int] = 2 :: x
它编译了,我的控制台打印了一个漂亮的x: List[Int] = <lazy>。但是这些行中的每一行都会导致StackOverflowException:
x take 1
x.head
x(1)
x
基于最后一个,看起来任何使用x 的尝试都会破坏试图计算x 的堆栈(要么发生堆栈溢出,要么试图在控制台中打印它)。在这个例子中,Scala 的惰性与 Haskell 的惰性有何不同?这是 Scala 的 lazy val 的一个特性还是 List 类只需要一个完整的尾部?
【问题讨论】:
标签: scala haskell linked-list lazy-evaluation