2012-05-01 43 views

答えて

4

彼らは今ですが、あなたがあなた自身のfoldLeftを転がした場合、私はの追加についてダートチームに話を聞いた

main() { 
    var sum = foldLeft([1,2,3], 0, (val, entry) => val + entry); 
    print(sum); 
} 

Dynamic foldLeft(Collection collection, Dynamic val, func) { 
    collection.forEach((entry) => val = func(val, entry)); 
    return val; 
} 

があるとして、コアライブラリを使用してそれを行うにはきれいな方法はありませんfoldLeftをコアコレクションに追加しました。

+0

これは、Rubyのようにコレクションインターフェイスに注入関数を追加することで対処できます。 –

+1

それはそこの非常にきれいなコードです。私が探していただけでなく、折りたたみを理解するようになりました。 –

+1

上記のfoldLeftのコードをインライン化するだけで、ライブラリコードの有無にかかわらず、無名関数を使って確かに行うことができます。また、あなたは再帰であまりにも巧妙でない限り、ほとんど常に変数が必要になります。代わりにforEachではなくfor(var each in ...)を使ってそれを行い、forループの本体に関数を適用することもできます。いずれも動作します。 –

4

私はまだ明らかなやり方は、この特定の問題についてより明確で理解しやすいと思っています。

num sum = 0; 
[1, 2, 3].forEach((num e){sum += e;}); 
print(sum); 

または

num sum = 0; 
for (num e in [1,2,3]) { 
    sum += e; 
} 
3
int sum = [1, 2, 3].fold(0, (previous, current) => previous + current); 

またはそれより少ない部屋を取るようにする短い変数名を持つ:

int sum = [1, 2, 3].fold(0, (p, c) => p + c); 
関連する問題