From: Minero Aoki Date: 2002-06-17T17:05:58+09:00 Subject: [ruby-dev:17487] Re: blocks and local variables あおきです。 In mail "[ruby-dev:17480] Re: blocks and local variables" Shin Nishiyama wrote: > 西山@千葉大です。初めて投稿します。 > 議論を見ていて感じたのですが、もし > method{....} > のような記述を導入してしまうと、「変数を見ただけでそのスコープがわかる」 > というRubyの大きな特長が失われてしまう気がしました。 そうそう、そうなんですよね。それはぼくも思ってました。 でもよくよく考えると、 ::C ::Outer::C の二つはどちらも見ためは C で同じです。つまり「スコープがわかる」 と言うときのスコープは、同種の変数のネストまでは指さない、と考え ないといけないと思います。そうするとローカル変数がメソッド中で ネストしてもルール違反とは言えません。 そこで種別ごとのなかで変数の有効範囲をわかりやすくするために 役立つのが「ひとつのスコープ内では名前をネストさせない」という ルールでしょう。ただ「ネストさせない」のルールを強制するのは 今のブロック変数のような仕様でなくとも実現できる (たとえば警告で) ので、それは分離して考えないといけないですね。 個人的には、変数がネストしたときに ruby が (機械が) 警告してくれ さえすれば、ブロック変数が shadowing しようがしまいがどっちでも 構いません。例えばクラス変数みたいに。 ------------------------------------------------------------------- 青木峰郎