返回如何在特定示例的Scala中工作?
让我们考虑一下:
def foo: Int = {
val sumR: List[Int] => Int = _.foldLeft(0)((n, m) => return n + m)
sumR(List(1,2,3)) + sumR(List(4,5,6))
}
scala> foo
res4: Int = 1
为什么sumR(List(1,2,3)) + sumR(List(4,5,6))表达式的第一部分得到更好的处理?毕竟,return应该导致从 返回sumR。那么,为什么结果不等于1+4?
回答
该return是有关foo方法,而不是sumR功能,所以return导致foo方法停止在这一点上,并因为它是在第一次迭代返回1foldLeft操作。第二个sumR不计算。
如果你想要 5 作为结果,你应该定义sumR为一个方法而不是一个匿名函数,这样return会导致sumR方法停止,而不是foo方法停止。
def foo: Int = {
def sumR(l: List[Int]): Int = l.foldLeft(0)((n, m) => return n + m)
sumR(List(1,2,3)) + sumR(List(4,5,6))
}
foo
// Int = 5