scala - 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 定义来解决问题呢?
解决方案
推荐阅读
- javascript - 是否可以传递对象。
来自存储键名的变量? - python - tensorflow.python.framework.errors_impl.InvalidArgumentError:收到的标签值 357436800 超出 [0, 2) 的有效范围
- java - 如何用 Project Reactor 替换 Spring Events
- mysql - 如何使用另一个表的结果重命名选择语句的列名
- android - 为什么无法连接到数据库?
- python - 为什么我的变量确定列表中的项目超出范围?
- git - 如何脱水任意完全推送的本地 git 存储库并稍后从远程重新创建它?
- assembly - 我们应该在汇编中将长字符串存储在堆栈中吗?
- windows - Visual Studio 未加载符号并显示错误:。无法找到或打开 PDB 文件。即使 PDB 存在于符号服务器中
- python - 安装 Ray 时出现 Python PIP 问题 - Wheel 包不可用