From: SASADA Koichi Date: 2007-02-15T14:14:26+09:00 Subject: [ruby-dev:30349] Re: class local instance variable  ささだです。 Yukihiro Matsumoto wrote: > | クラスローカルインスタンス変数の対案です。 > | > | @(v) なんてのはキモイですかねぇ。とりあえず、今まで出てきたとは思えな > |い変数表記だと思います。 > | > | で、$(v) でスレッドローカル変数(Thread#[:v]と同じ?)。 > > 対案が出るのはすばらしいことだと思いますが、@(v)でひとつの変 > 数と言うのはあまりにも美しくない。ソフトウェア工学の観点から > はソフトウェア変更の影響を限定的にするためできるだけスコープ > の小さい変数の利用を奨励したいわけですが、それが@(v)ではむし > ろ「使うな」と言ってるようなものでしょう。  私の感覚だと、今まで変数名の一部として利用可能だった "_" が、特殊な記 号として認識されることのほうが、ちょっとどうなんだろう、と感じました ("@_" でひとつ、だからこれにはあたらない、ということかもしれません が)。感じで喋ってもしょうがないか。@(v) だと、なんとなく限定的な感じが して良いかな、と思って先の投稿になりました。  ちなみに、延長線上でブロックローカル変数の prefix を _(つまり、_i は 強制的にブロックローカル)ってのはどうなんでしょうね。":=" operator を設 けるよりは好みかもしれない :)  この話、たとえば Singleton モジュール内で利用するインスタンス変数は @singleton__mutex__ のようにしました(あと、delegator も)。これは、本質 的には今回の @_v で解決したかった問題(無関係なところからはアクセスして ほしくない、という要求)な気がするんですが、特異クラスとかその辺の関係 で、うまいこと解決出来ていませんでした。実は、解決策はもっと別にあるん じゃないか(現状だと naming convention か)、と思うんですが、気のせいか なぁ。Singleton が特殊なだけかもしれませんが。はてさて。  もっと賢い保守派(笑)の論客希望。RHGなどで直接話を聞く限り、この仕様 を歓迎している意見って聞いたことが無いから、もっと色々意見が出るような気 がします。 -- // SASADA Koichi at atdot dot net