From: Shugo Maeda Date: 2002-06-07T16:09:38+09:00 Subject: [ruby-dev:17356] Re: blocks and local variables 前田です。 At Fri, 7 Jun 2002 15:31:54 +0900, matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > |というのは、そうすると:=は外側の変数をhideすることにしか使えない > |(そしてそれはあまり良くないことだと思われる)からです。 > | > |# と、今まつもとさんと話していたら、:=で外側の変数をhideする場合 > |# には警告を出すべきだという話になりました。 > |# つまり:=ができてうれしいのは、識別子が重なっているのを検出でき > |# る点にあるわけです。 > > より正確には > > * 識別子が重なっているかどうかを気にしなくてよい > > というのが最大の利点です。これは警告を出しても出さなくても実 > 現できます。これは次の利点である > > * 重なっていても「正しく」動く > > ということから得られます。そして最後に、警告を出せば > > * 重なっていることが検出できる > > というメリットになります。 ただ、警告を出さないとすると、「重なっていても「正しく」動く」と いう点が、一時的に外側のスコープの変数を隠すようなコードを助長し てしまうような気がする(そして、それはたぶんまつもとさんの意図 とは異なる)ので、警告を出すようにした方がよいんじゃないかと思いま す。 # bitのCLUの記事を見たのですが、やはり「スコープの中では、(たとえ # 内側のブロックでも)同じ名前を再定義することはできない」と書いて # ありました。 # 私も「これが絶対正しい」と思うんですけど。 -- 前田 修吾