可能重复:
在 Scala 中返回
我刚刚开始使用 Scala,并且遇到了一些我不太了解的行为,我希望 stackoverflow 社区可以提供一些启示。
使用此测试:
example(1,List(1))
此代码按我的预期工作 - 在第二次迭代中返回 0:
def example(value: Int, list: List[Int]): Int = {
if (list.isEmpty)
return 0
else
return 1
example(value - list.head, list.tail) + example(value, list.tail);
}
但是,此代码不会 - 它在第二次迭代时抛出 NoSuchElementException("head of empty list"):
def example(value: Int, list: List[Int]): Int = {
if (list.isEmpty)
0
else
1
example(value - list.head, list.tail) + example(value, list.tail);
}
不同之处似乎在于,在第二个示例中,Scala 假设“0”和“1”不是返回值,而是要计算的表达式,因为函数末尾还有另一个表达式。由于显式的“return”关键字,第一个示例将按预期返回是有道理的。
但是,考虑到第二个示例中 if 语句的语法,我认为编译器会意识到“0”不是要评估的表达式,而是返回值。为什么不是这样?