在 Scala For 循环中返回

ash*_*ina 1 for-loop scala return scala-2.10

我是 Scala 新手,所以尝试先做简单的事情。

我写了一个方法如下。

//Given a list of numbers find the first number that is a multiple of 7
  def FindFirstMultiple(input: List[Int]) : Int  = {   
    for (
        i <- input        
        if (i % 7 == 0)
       ) 
      return i        
  }  
Run Code Online (Sandbox Code Playgroud)

这个方法会报错

type mismatch;  found   : Unit  required: Int   
Run Code Online (Sandbox Code Playgroud)

我无法理解这一点。当我没有返回类型而只是打印值时,它工作得很好。另外,为什么错误会波浪形地悬停在 i <- input. 我认为 Scala 编译器试图告诉我一些事情,但我就是无法理解。导致此错误的原因是什么?

Arn*_*-Oz 5

如果你想用 for 循环运行它,你还需要添加一个 return 0,如下所示

def FindFirstMultiple(input: List[Int]) : Int  = {   
    for ( i <- input if (i % 7 == 0)) return i 
    0       
  }  
Run Code Online (Sandbox Code Playgroud)

需要最终值,因为当 if 不满足时 for 本身不会返回任何内容。

正如 user1779032 建议的更好的方法是

def FindFirstMultiple(input: List[Int]) = input.find(i => i % 7 == 0).getOrElse(0)  
Run Code Online (Sandbox Code Playgroud)