配列を持つ
a = 1, 2, 3, 4
そして列挙子:
e = a.map!
次に、e.next繰り返し呼び出すことにより、配列 a が適切に破棄されます。
e.next #=> 1
a #=> [1, 2, 3, 4]
e.next #=> 2
a #=> [nil, 2, 3, 4]
e.next #=> 3
a #=> [nil, nil, 3, 4]
それはとても陽気です!でもやってみると
e.next { |x| 2 * x } # => 4
私は得る
a #=> [nil, nil, nil, 4]
希望の代わりに
a #=> [nil, nil, nil, 8]
私は何を誤解していますか?a.map!要素で私がやりたいことをする方法は?
私の問題は、列挙子を完全に理解していないことです。たとえば、前のコードを配置すると、enumeratoreは へのバックドアを構成しaます。
e.each { 42 }
a #=> [42, 42, 42, 42]
nil以外の値を使用して、これを徐々に行う方法を知りたいです。e.rewind(前に示したように、 and をe.next数回使用して、徐々に nil で埋めることができます。