配列を持つ
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 で埋めることができます。