use*_*764 1 conditional if-statement scala
为什么以下产生输出"ayyayy"而不仅仅是"ayy"(曾经)?
def iftest(b: Boolean): Unit = {
if(b) iftest(false)
print("ayy")
}
Run Code Online (Sandbox Code Playgroud)
我在REPL中运行它iftest(true)应该导致它在第一次传递时失败但在第二次传递时失败(因此只有一个"ayy").那为什么它既成功又成功呢?
在scala中是否存在某些我不知道的递归"后退"?
在scala中是否存在某些我不知道的递归"后退"?
不,该方法按照您的定义运行.让我们分析:
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")
}
}
Run Code Online (Sandbox Code Playgroud)