2012-04-06 571 views
2

我正在尝试学习scala,迄今为止它一直很棒。 我很难找出如何解决这个错误,我试图教育自己关于foreach和返回他们内部的陈述,但我仍然不明白的问题,所以我在这里发布我的问题: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)){ 
      ^

我明白了一个类型是什么,但我无法弄清楚如何解决这个问题。我如何将我分配给int?预期的行为是该方法返回3.这是否会发生,以及我的代码有什么问题?

+7

在Scala中通常不会使用'return',通常可以避免像'Array'这样的可变数据结构。你的方法的惯用等价物(包括drexin的答案中的默认值)可能类似于'def a = 1至5 find(_ == 3)getOrElse 0'(或者'val a = 3' :)) – 2012-04-06 12:55:36

回答

11

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

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

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

如果一个方法的返回类型为Int,那么该方法中的所有路径都必须返回一个Int。在你的实现中情况并非如此。例如,如果在数组中不存在数字3,则不会返回任何数据,这意味着返回类型将为单位。