我是新來的斯卡拉,我正在玩Array.tabulate方法。執行這段簡單的代碼段時(原本是一個dp問題),我得到一個StackOverFlowError。Array.tabulate 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方法對其進行評估 - 無限反覆。
我在做什麼錯了? (我更新了代碼片斷,因爲我將它從Dynamic programming in the functional paradigm中給出的解決方案中刪除,特別是Anntal S-Z的答案)
查看我更新的帖子。任何理由,爲什麼它在我引用的職位,但不是我的職位?謝謝。 – xxtommoxx
@xxtommoxx你指的是哪個特定答案? – ghik
對不起忘了提及Antal S-Z的回答 – xxtommoxx