返回如何在特定示例的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


以上是返回如何在特定示例的Scala中工作?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>