2011-10-29 4 views
3

Ruby 1.8.7以前では、Enumerable::each_with_indexは引数を受け入れていませんでした。 Ruby 1.9では、任意の数の引数を受け入れます。 Documentation/codeは、それらの引数を単に::eachに渡していることを示しています。組み込みの標準ライブラリEnumerableでは、Enumerableの::eachメソッドがパラメータを期待していないので、引数を渡すとエラーが発生すると思います。Enumerable :: each_with_indexは、オプションでRuby 1.9で引数を取るようになりました。どのような意味があるのか​​、そのユースケースは何ですか?

これは、引数を受け入れる::eachメソッドを作成する独自のEnumerableを作成する場合にのみ便利だと思います。これが役に立つと思われる例は何ですか?

この変更の他に明白な結果はありませんか?

答えて

2

私はいくつかの宝石のコードを見て、その機能をほとんど使用していませんでした。それがないことの一つ、spreadsheet

def each skip=dimensions[0], &block 
    skip.upto(dimensions[1] - 1) do |idx| 
    block.call row(idx) 
    end 
end 

私は本当に重要な変化としていることがわかりません。#eachミックスインモジュール列挙クラス、および選択(マップ、追加されたメソッドのための基本メソッド..です。)引数を受け入れません。

+0

'each_with_object'は引数を受け入れます。私はあまりにも議論されていないといいですね! –

+1

@Andrewしかし、each_with_objectは偽装されているので、議論が必要なのは当然のことです。しかし、私は、それぞれに議論を許すかどうかは重要である(あるいは重要になる)か、それとも軽微なものかを問わず、このすべてのことについては本当にわからないということを認めなければなりません。いずれにしても、基本的な反復子である私は、何の引数も受け入れないでください。 – tokland

+0

'reduce'と' each_with_object'の違いの1つは、ブロックが与えられていないときに後者が列挙子を返すことだけです。それほど大きな違いはありませんか? –

関連する問題