まつもと ゆきひろです

In message "[ruby-list:36347] Re: ar=[];ar+=2でエラー"
    on 02/11/04, Tanaka Akira <akr / m17n.org> writes:

|現在の仕様において当然であることには同意します。実際そうなりますし。
|でも、ここで述べているのはその仕様自体に不条理を感じるということです。

不条理を感じる人がいるのは理解できますが、では変えた方が良い
かというと必ずしもそうは思っていません。

個人的にプログラム上の識別子の「意味」あるいは「種別」は静的
に決まるべきだと考えています。問題はその決め方ですが、上から
順に見ていくというのは、2パスを避けるという観点からもそんな
に悪くないと思っています。

まあ、ローカル変数に対する代入に静的な意味(宣言)と動的な意味
(初期化)の両方の意味を与えているのが問題の元凶ではあるのです
が、これは目的によって見方を変えてもらうのがよいと個人的には
思っています。つまり、ある識別子がローカル変数かどうか判定す
る場合には、メソッドの先頭から(実行状況は無視して)宣言だと思っ
て代入をスキャンしてすれば良くって、逆にローカル変数の実行時
の値に関心がある場合には、そのまま代入として見ればよいのでは
ないかと。

|なお、「Java のように」というのは Java の definitive assignment のこと
|なのですが、これもやはり静的に決まります。

知ってますが、そのプログラム解析のコストは割りに合わないので
はないかと考えています。