Scala foreach回归

Eta*_*tam 1 java foreach scala return

你如何使这种方法有效?

def filled(b: Board): Board = {
  b.next foreach { n =>
    if (n.filled) n
    else filled(n)
  }
}
Run Code Online (Sandbox Code Playgroud)

我需要它在首次填充n(n.filled == true)之后返回,就像在Java中一样.

现在我得到:

chess-knight.scala:72: error: type mismatch;
 found   : Unit
 required: this.Board
    b.next foreach { n =>
           ^
one error found
Run Code Online (Sandbox Code Playgroud)

谢谢!

Tom*_*icz 6

这不是你需要的吗?

def filled(b: Board): Board = b.next find {_.filled} get
Run Code Online (Sandbox Code Playgroud)

提供这b.next是一个,Seq[Board]并且总是至少有一个filled Board.

如果你 坚持纯粹的功能更喜欢利用模式匹配的方法List:

def filled(b: Board): Board = {
  b.next match {
    case n :: _ if(n.filled) => n
    case _ :: rest => filled(rest)
    case Nil => throw NoSuchElementException
}
Run Code Online (Sandbox Code Playgroud)