2012-10-17 107 views
1

你如何使這種方法的工作?斯卡拉foreach返回

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

我需要先填寫N(n.filled ==真)象Java後返回。

現在,我得到:

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

謝謝!

+0

是什麼類型'b.next'? –

+0

對不起,b.next:列表[Board]。 – Etam

回答

6

這不是你所需要的嗎?

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

提供b.nextSeq[Board]始終至少有一個filledBoard

如果堅持純粹的功能更喜歡List的方法利用模式匹配:

def filled(b: Board): Board = { 
    b.next match { 
    case n :: _ if(n.filled) => n 
    case _ :: rest => filled(rest) 
    case Nil => throw NoSuchElementException 
} 
+1

是什麼讓你認爲你的第一個解決方案不是純粹的功能? –

+0

@NikitaVolkov:我的意思是'List'是根據'head'和'tail'來定義的,並且模式匹配利用了這個事實。我們可以想象,'filter'也是用'head'和'tail'定義的,所以第二種方法只使用基本的構造,不需要輔助方法 –

+0

錯誤地使用術語「純功能性」。 – missingfaktor