1

你如何使这种方法发挥作用?

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

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

现在我得到:

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

谢谢!

4

1 回答 1

6

这不是你需要的吗?

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

假设它b.next是 aSeq[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
}
于 2012-10-17T21:44:54.110 回答