首页 > 解决方案 > val内的Scala递归val函数

问题描述

有人可以向我解释发生了什么吗?

在这里,我有 val 我在其中定义了 val 函数并在之后立即调用它。调用时出现错误factorial(x - 1)

前向参考扩展了价值因子的定义

val factorialOf3: Int = {
      val factorial: Int => Int = (x: Int) => if(x == 0) 1 else x * factorial(x - 1)
      
      factorial(3)
    }

如果我在定义上使用惰性 val 或 def 函数,factorial它将编译没有错误。我理解延迟加载和急切加载之间的区别,但它不起作用对我来说没有意义。定义

val factorial: Int => Int = (x: Int) => if(x == 0) 1 else x * factorial(x - 1)

没有将它嵌套在 val 中工作正常。那么为什么将它嵌套在 val 中会引发错误并将其更改为延迟加载或 def 定义来解决问题呢?

标签: scalafunctionrecursionnestedlazy-evaluation

解决方案


推荐阅读