From: matz@... (Yukihiro Matsumoto) Date: 1999-04-21T11:49:05+09:00 Subject: [ruby-list:13971] Re: Message of Today in 1999/04/20. まつもと ゆきひろです In message "[ruby-list:13951] Message of Today in 1999/04/20." on 99/04/20, "NAKAMURA, Hiroshi" writes: | ローカル変数がネストしない信念とは | | ひとつのメソッド内で同じ名前の変数が別の意味を持たない | | ことです. | 分かりやすさのためですね | でも,ブロック内初出のメソッドは別の意味を用いるのが不徹底.;_; | |とあります. 久野さんがbitでなされたCLUでの説明があると分かりやすそうです が.前田さん,コピー持ってたっけ? # 私も自宅の何処かにあったような. |1. 「ひとつのメソッド内」は「ひとつのブロック内」でよいのでしょうか. ひとつの「スコープ」の方が良いかしら.Rubyではブロックってい うと,「イテレータ」につけるアレのことを意味しますから,「ひ とつのブロック内」だとちょっと意味が変わって来ます. |2. 逆を取って「変数の名前を見ただけでその意味が決められる」 | (=分かりやすい)という理解でよいのでしょうか. ま,そういうことですね.この名前の変数はひとつのスコープ(典 型的にはメソッド)内にひとつとしたい訳です.気分としては. |3. ブロック内初出のメソッド(名?)が持つ別の意味とは何でしょう. | それを見ただけではローカル変数と区別できない, | ということと関係ありますか? これは以下の例で分かりますか? def foo var1 = nil loop do var2 = 5 ... end defined? var1 #=> true defined? var2 #=> false loop do var2 = 20 ... end end つまり,ブロックの内部で初出のローカル変数の有効範囲(スコー プ)はそのブロックの終りまでです.これは「スコープはネストし ない」というルールの例外になっています.結果としてひとつのス コープ内でひとつの変数(この場合にはvar2)に複数の意味を割り振 ることができます. まつもと ゆきひろ /:|)