为什么以下产生输出" ayyayy"而不只是" ayy" (一次)?
def iftest(b: Boolean): Unit = {
if(b) iftest(false)
print("ayy")
}
我在REPL中以iftest(true)
运行它,这会导致它在第一次通过时失败但在第二次通过时失败(因此只有一次" ayy")。那么为什么它既成功又成功呢?
是否存在某种递归"后退"在斯卡拉,我不知道?
答案 0 :(得分:8)
scala中是否存在某种递归的“backfolding”,我没有 知道吗?
不,该方法按照您的定义运行。让我们分析一下:
iftest(true)
并调用该方法。if(b)
为true
,因此您调用iftest(false)
并开始新的堆栈框架。if(b)
现在为false
,因此我们不会再次递归调用该方法。print("ayy")
,因此将其打印出来并完成方法iftest(false)
,下一行代码是println("ayy")
,所以再打印出来也许你想要的是:
def iftest(b: Boolean): Unit = {
if (b) {
iftest(false)
print("ayy")
}
}