私は Scala が初めてで、Array.tabulate メソッドをいじっていました。この簡略化されたコード スニペットを実行すると、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 メソッドを再度呼び出して評価しようとすることに気付きました。
私は何を間違っていますか?(コードスニペットを更新しました。これは、関数型パラダイムでの動的プログラミング、特にAntal SZの回答で与えられたソリューションに基づいていたためです)