要为此添加另一个可能的答案,这是我想出的一个解决方案,它与@jgaw 的答案略有不同,并使用了@tailrec
注释:
def sum(xs: List[Int]): Int = {
if (xs.isEmpty) throw new Exception // May want to tailor this to either some sort of case class or do something else
@tailrec
def go(l: List[Int], acc: Int): Int = {
if (l.tail == Nil) l.head + acc // If the current 'list' (current element in xs) does not have a tail (no more elements after), then we reached the end of the list.
else go(l.tail, l.head + acc) // Iterate to the next, add on the current accumulation
}
go(xs, 0)
}
关于检查传入的空列表的快速说明;在进行函数式编程时,最好不要抛出任何异常,而是返回其他内容(另一个值、函数、案例类等)以优雅地处理错误并继续在执行路径中流动,而不是通过Exception
. 我在上面的示例中扔了一个,因为我们只是在查看递归地对列表中的项目求和。