稲葉です。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>