青山です。 On Wed, 8 Dec 1999 02:53:37 +0900, Hiroshi Saito <HiroshiSaito / pob.org> wrote: > つまり、イテレータのブロックでの結果をイテレータ本体に > 持ち越すことはできますか? ごとけんさんが書かれているように、Array#filter というものがあります。 あるいは、持ち込んでさらに何かしたいという事であれば、Array#filter の 中身はこんな感じなので、適当に手を加えても良いでしょう。 a = [1,2,3,4,5] def a.itr() for i in 0...self.size self[i] = yield(self[i]) end end a.itr do |i| i += 10 # Ruby では代入は破壊的動作ではありません。この場合以外につ # いても、代入が元のオブジェクトに影響を与える事はありません。 print i, "," i # ブロックの最後の値が yield の値となります。 end array[i] = や hash["key"] = は、Array, Hash の []= メソッドであり、こ れらは代入のように見えますが、要素のセットをするメソッドです。Hash で は hash.store("key", "value") という別名もあります。 このようなメソッド以外の、代入*演算子*は、変数とオブジェクトを関連付け るだけであり、そのオブジェクトに対してはなんら影響を与えません。(GC は 別として) -- 青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>