foreach in return to return value

时间:2012-04-06 11:51:56

标签: scala methods foreach

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.我的代码出了什么问题?

3 个答案:

答案 0 :(得分:13)

这是因为foreach中的lambda确保返回一个值。如果您提供默认返回值,它应该可以工作。

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

答案 1 :(得分:2)

这是因为没有其他或默认的返回值。

如果方法的返回类型为Int,则该方法中的所有路径都必须返回Int。在您的实现中不是这种情况。例如,如果在数组中没有数字3,则不会返回任何内容,这意味着返回类型将为Unit。

答案 2 :(得分:0)

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

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