From: Shugo Maeda Date: 2002-06-07T15:09:26+09:00 Subject: [ruby-dev:17348] Re: blocks and local variables 前田です。 以前考えたことを思い出したので、ついでに書いておきます。 At Fri, 7 Jun 2002 14:46:06 +0900, Shugo Maeda wrote: > > ふと思ったんですが、:= で代入すると(その変数がブロックの外で使われてい > > ても)そのブロック内でローカルになるとか。 > > > > Ruby では代入によって変数が宣言されるので、やるとしたら、代入の構文を > > いじるか、宣言のための構文を新規に入れるか、どちらかなんじゃないですか > > ね。 > > そうそう、そう思っていて、以前提案もしたのですよね。 > > http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/11013?10856-11769 > > # もう4年も前の話になるのか。 > > 個人的には、ここに書いてあるように、既存のローカル変数と識別子が > 重複しない場合も、普通の代入ではブロックローカルにせずに、ブロッ > クローカル変数の宣言/初期化を行う場合はかならず:=を使う、という仕 > 様の方が便利な気がする(今みたいにメソッドの先頭でfoo = nilなどと > する必要がなくなるから)のですが、互換性を考えると今更ちょっと無理 > ですよね。 今みたいに暗黙のブロックローカル変数の宣言があると、:=を明示的な 宣言にしてもそれほどうれしくないんですよね。 というのは、そうすると:=は外側の変数をhideすることにしか使えない (そしてそれはあまり良くないことだと思われる)からです。 # と、今まつもとさんと話していたら、:=で外側の変数をhideする場合 # には警告を出すべきだという話になりました。 # つまり:=ができてうれしいのは、識別子が重なっているのを検出でき # る点にあるわけです。 -- 前田 修吾