Scala函数返回行为
我试图解决这个epfl scala课程的家庭作业,他们让我写一个列表的总和。如果我使用return语句或if-use-match语句,我就可以这样做,但我不明白为什么在没有return语句的情况下使用if/else不能工作Scala函数返回行为,scala,recursion,Scala,Recursion,我试图解决这个epfl scala课程的家庭作业,他们让我写一个列表的总和。如果我使用return语句或if-use-match语句,我就可以这样做,但我不明白为什么在没有return语句的情况下使用if/else不能工作 def sum(xs: List[Int]): Int = xs { if (xs.isEmpty) { 0 } else { xs.head + sum(xs.tail) } } 运行sum(列表(1,3,2))时得到的运行时错误为 如果我将代
def sum(xs: List[Int]): Int = xs {
if (xs.isEmpty) {
0
} else {
xs.head + sum(xs.tail)
}
}
运行sum(列表(1,3,2))时得到的运行时错误为
如果我将代码中的0替换为100,则错误消息将更改为java.lang.IndexOutOfBoundsException:100。就像它试图访问列表中的第N个元素,而我所需要的只是一个返回。如果我添加两个return语句,则所有语句都会按预期工作
你能解释一下吗?根本原因在函数声明的第一行:
def sum(xs: List[Int]): Int = xs {
这相当于:
def sum(xs: List[Int]): Int = xs.apply(<Some function>)
现在:
尝试删除函数开头的
=
之后的xs
。因此,如果方法的整个主体是单个表达式,则无需创建语句块。把卷曲的大括号丢了。这同样适用于条件表达式:defsum(xs:List[Int]):Int=if(xs.isEmpty)0 else xs.head+sum(xs.tail)
def sum(xs: List[Int]): Int = xs.apply(<Some function>)
def sum(xs: List[Int]): Int = {
sum(List(1,3,2))
res0: Int = 6