【发布时间】:2013-09-26 19:49:22
【问题描述】:
我是 Scala 的新手,我正在使用 Array.tabulate 方法。执行这段简化的代码 sn-p 时出现 StackOverFlowError(最初是 dp 问题)。
import Lazy._
class Lazy[A](x: => A) {
lazy val value = x
}
object Lazy {
def apply[A](x: => A) = new Lazy(x)
implicit def fromLazy[A](z: Lazy[A]): A = z.value
implicit def toLazy[A](x: => A): Lazy[A] = Lazy(x)
}
def tabulatePlay(): Int = {
lazy val arr: Array[Array[Lazy[Int]]] = Array.tabulate(10, 10) { (i, j) =>
if (i == 0 && j == 0)
0 // some number
else
arr(0)(0)
}
arr(0)(0)
}
调试时,我注意到由于 arr 是惰性的,当它到达 arr(0)(0) 表达式时,它会尝试通过再次调用 Array.tabulate 方法来评估它——无限地一遍又一遍。
我做错了什么? (我更新了代码 sn-p,因为我是基于 Dynamic programming in the functional paradigm 中给出的解决方案,特别是 Antal S-Z 的答案)
【问题讨论】:
标签: arrays scala scala-2.10