稲葉です。rim.or.jpから送ったんですが, 届かなかったようなので出しなお します. この話題は何度かここで出てると思います. (自分も入りたてのころ出しました) Masatoshi SEKI wrote: > > 咳です。 > ruby 1.2.3(99/02/16) [i586-linux] を使ってます。 > > 話題のイテレータなんですが、 > > irb(main):001:0> str = '1 2 3' > irb(main):002:0> str.split.each do |str| str = 'foo' end > irb(main):003:0> p str > "foo" > > となるのは正しい挙動でしょうか ? rubyのblockの仕様だそうです。 > ブロックの中の変数(?) str に代入したら、 > 外の str に代入されました。 |x|のような||内の「変数」はかならずしも新しい変数を導入するものではなく, 単なる代入の左辺です. (実際, 配列要素とかも書ける) #そう思って見ると, ちゃんとマニュアルでもそうなっている... そこにローカル変数を書くとそこまでblock外で使われていなかった時のみblock 内ローカルの変数になります。 -- 稲葉 浩人 <inaba / sdd.tokyo-sc.toshiba.co.jp/inaba / st.rim.or.jp>