From: shugo@... (MAEDA Shugo) Date: 1998-11-22T17:24:27+09:00 Subject: [ruby-list:11013] block local variable (Re: スコープの範囲) 前田です。 # ruby-devに振ります。 >>>>> In [ruby-list:11008] >>>>> "前田" == MAEDA Shugo wrote: 前田> と考えてくると、イテレータブロックが新たにスコープを導入するのは 前田> 一体何のためなんでしょう? 前田> 名前の衝突を防ぐ効果は新井さんも御指摘の通りないわけですし。 前田> # 何か大事なことを忘れてる気がする(^^; まつもとさんが既に書かれてましたね(^^; >ブロック内変数は > Thread固有変数 > 手続きオブジェクト固有変数 >などのために必要なものです. なるほど。 # rskkservではこのために普通のローカル変数からブロックローカル変数 # にわざわざ値を移していたのですが、すっかり忘れてました(^^; では逆に、 foo = 0 iter { foo ::= 1 # ブロックローカルになる。演算子はSatherから借用:-) } p foo #=> 0 っていうのはどうでしょう。 これだと名前の衝突を避けられるので、ブロックローカル変数の メリットが増すと思います。 foo = 1とした時の動作を従来通りとすれば、互換性の問題もないですよね。 個人的にはfoo = 1とした時は、既にブロックローカルとしてfooが宣言されて ないかぎり、普通のローカル変数への代入とみなす方が便利な気もしますが。 -- 前田 修吾 (mailto:shugo@aianet.ne.jp)