In article <1036962504.889517.29322.nullmailer / picachu.netlab.jp>,
  matz / ruby-lang.org (Yukihiro Matsumoto) writes:

>   * でも、なぜかelseに抵抗がない
> 
>     たぶん、私の頭の中ではif then else のことを
> 
>       if (cond)
>         ...
>       end
>       if (!cond)
>         ...
>       end
> 
>     と把握しているのではないかと推測します。だから、then節が
>     else節に影響を与えるがelse節がthen節に影響を受けない非対
>     称性が気にならないと。

つまりメンタルモデルの違いによるわけですね。Ruby が作者のメンタルモデ
ルを反映するのは自然な話なので、それはそれで納得できます。

> ということで、どうもRiteの挙動は
> 
>   * (通常の)ローカル変数については現状維持
> 
>   * ただし、ローカル変数への代入が登場する前に同名の無引数で
>     かっこが省略されたメソッド呼び出しがあれば、警告する(な
>     かだパッチとほぼ同様の挙動)
> 
> としようかなと思っています、今日の時点では。

ま、処理系を黙らせるためにプログラムを変えなきゃいけないことはいつもの
ことなので、警告が増えるのはべつに問題ないんじゃないですかね。

>   * ブロックローカルにしたい場合には特別のだ移入を行う。現時
>     点での案は
> 
>       let a = value
> 
>     以前の := を使ったものよりはマシな気が。あと、ブロック内
>     ローカル変数の名称が外側のローカル変数と重複した場合には
>     警告になる。

今までの話とは semantics は変わっていない、かな?

ふむ。let a = b = value で、b の扱いは?

> という風にしようかなと思っています。非互換ですが、普通の使い
> 方をしてる場合にはあまり問題にならない非互換性だと思います。
> みなさん、今後を考えてちょっとだけ注意してブロック内ローカル
> 変数を使いましょう。

現在と Rite の両方でブロックローカルな変数はブロックパラメータだけな気
がするので、いまのところ注意するのは困難な気がします。

ブロックローカル変数を使いたい時には、lambda {|a| a = value ...}.call と
する、というのはちょっとあまりにあんまりかなぁ。
-- 
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)