原です。

>なかだです。

> > '!' で終わる変数をブロックローカルにするのは?
>
>a!=0が代入なのか比較なのかが分かりづらくないでしょうか。

確かに。ただ実際に a! という変数名を(非公式にたまたま)許して
いた時期があり、それを復活させようという魂胆でした。でも、メソ
ッド名における ! とあまりにかけ離れてはいますね。

> > (5)定義済みローカル変数に対する := は = と同値。
>
>引用が前後しますが、ここでいうローカル変数というのはメソッドス
>コープ、ブロックローカルでない変数のことでしょうか。

ああ、だいたいそういう意味です。今までのローカル変数をローカル
変数と呼んでいました。新しいブロックローカルな変数をブロックロ
ーカル変数と呼んでいました。

> > (3):= がアクセスする定義済みブロックローカル変数は、外で最も近いもの。
>
>個人的には、:=は新しくブロックローカル変数を作らない代入、のほ
>うがいいように思います。

他の言語で := は代入 = は等しい事を表す述語、というのがあります
から、確かにちょっと違和感ありますね。しかし、= は Ruby における
ノーマルな、無徴な代入、:= は有徴な代入程度の意味で、悪くない気
もするのです。

というか、見た目というなら、見た目を別のものにしたらいい。

つまり、本質は「(新しい)ブロックローカル変数には特別な記号を
使い、外の代入にまた特別な記号を使う」という事です。この例では
(!,:=)だったけど例えば、(%,.=)とか、(\,=>)とか、
(:,====)とか、パーサの変更が難しくないものを選べばいい。

#上記のが「難しくない」かどうかは知りません。

試しに(%,.=)にしてみると

%x = 0
foo {
    %x = 1
    %x .= 10
    p %x #=> 1
    foo {
      foo {
        %x .= 3
      }
      p %x #=> 3
    }
    p %x #=> 3
}
p %x #=> 10

うむ、かなり拒絶感は減る。


>同じスコープ同じ名前で別のものを指すというのは、あまり嬉しくな
>いような気がします。

確かに %x まで見ただけではそれが何を指すか分からなくて、次が = 
なのか := なのかまで見ないといけないのは、ちょっと気持ちわるい
ですね。もっとも Ruby ユーザは .foo があったら次に = があるか
否か見るまで評価を保留する訓練をしているので、すぐ馴れるかも。
... 話が違う?

というか同じ変数名に = と .= 両方したがる状況というのがよっぽ
どの事である、あるいはめったに無い事なので、あまり気にしなく
てもいいのでは。あるいは両方は警告または禁止してもいいと思いま
す。その辺は詰めてないのでして。