我是 Scala 的新手,我在玩 Array.tabulate 方法。执行这段简化的代码片段(最初是 dp 问题)时,我得到了 StackOverFlowError。
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 方法来评估它——无限地一遍又一遍。
我究竟做错了什么?(我更新了代码片段,因为我是基于函数范式中动态编程中给出的解决方案,特别是 Antal SZ 的答案)