您如何使这种方法起作用?

def filled(b: Board): Board = {
  b.next foreach { n =>
    if (n.filled) n
    else filled(n)
  }
}


我需要像Java中那样先填充n(n.filled == true)后返回它。

现在我得到:

chess-knight.scala:72: error: type mismatch;
 found   : Unit
 required: this.Board
    b.next foreach { n =>
           ^
one error found


谢谢!

最佳答案

这不是您所需要的吗?

def filled(b: Board): Board = b.next find {_.filled} get


假设b.nextSeq[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
}

07-25 23:30