稲葉です。

この話題を見るのは3度めです。
自分が見た一度目は自分が出したのだけど、それ以前にはなかったのでしょう
か?

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変数の仕様だそうです。自分は

 do |x, y, z| ... end は do |*__args__| x,y,z = __args__; ... end

とおなじものと理解してます。

> ブロックの中の変数(?) str に代入したら、
> 外の str に代入されました。

|x|のような||内の変数はそこまでblock外で使われていなかった時のみblock
内の変数になるようです。
--
			稲葉 浩人  <inaba / st.rim.or.jp>