3
def a: Int = {
  for(i <- Array(1,2,3,4,5)){
    if(i == 3)
      return i
  }
}

上面的方法不会编译,我得到以下错误:

error: type mismatch;
 found   : Unit
 required: Int
       for(i <- Array(1,2,3,4,5)){
             ^

预期的行为是该方法返回 3。我的代码有什么问题?

4

3 回答 3

13

那是因为您的 lambdaforeach确实保证返回一个值。如果您提供默认返回值,它应该可以工作。

def a: Int = {
  for(i <- Array(1,2,3,4,5)){
    if(i == 3)
      return i
  }
  0
}
于 2012-04-06T11:56:11.850 回答
2

这是因为没有 else 或默认返回值。

如果方法的返回类型为 Int,则该方法中的所有路径都必须返回 Int。在您的实施中并非如此。例如,如果 Array 中没有数字 3,则不会返回任何内容,这意味着返回类型将为 Unit。

于 2012-04-06T11:58:57.620 回答
1

不要在 #Scala 中使用 Return。return 关键字不是“可选的”或“推断的”;它改变了你程序的含义,你永远不应该使用它。

https://tpolecat.github.io/2014/05/09/return.html

于 2018-04-10T19:21:00.503 回答