2012-01-09 11 views
2

簡単な質問。私はListの各要素にClosureを実行するvoid applyを書くべきです。Groovyリスト適用閉じる

class Lista { 

    def applay(List l, Closure c){ 
    return l.each(c) 
    } 

    static main(args) { 
    Lista t = new Lista() 
    List i = [1,2,3,8,3,2,1] 
    Closure c = {it++} 
    println t.applay(i, c) 
    } 
} 

あなたは何が間違っていると思いますか?

答えて

3

コードの問題点は、クロージャ{it++}がリスト内のすべての要素を1ずつインクリメントしますが、結果はどこにも保存されないということです。あなたがしたいことは、元のリストの各要素にこのクロージャを適用した結果を含む新しいListを作成することだと思います。その場合はeachの代わりにcollectを使用してください。

class Lista { 

    def applay(List l, Closure c){ 
    return l.collect(c) // I changed this line 
    } 

    static main(args) { 
    Lista t = new Lista() 
    List i = [1,2,3,8,3,2,1] 
    Closure c = {it + 1} // I changed this line 
    println t.applay(i, c) 
    } 
} 
+0

。ありがとうございました。 – user1138470

+0

@ user1138470 [accepting](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)の答え、または少なくとも* upvotingで考える - それはただの温かいことではないDonのためにあいまいであり、将来の訪問者が回答が助けられたことを知るのに役立ちます。ありがとう! –

2

代替答え(そうJavaに似ていない):

class Lista { 
    def apply = { list, closure -> list.collect(closure) } 

    def main = { 
     println apply([1,2,3,8,3,2,1], {it + 1}) 
    } 
} 

完璧な作品
関連する問題