まつもと ゆきひろです In message "[ruby-list:33252] Re: " 差分ベースモジュール " in Ruby" on 02/01/09, Tanaka Akira <akr / m17n.org> writes: |> evalのことを考えなければスコープ(class/module ..endの範囲)ご |> とに一意のIDを割り当て、それをprefixにするというのが一番簡単 |> そうですね。 | |ふむ。衝突を避けるだけならそれでも良さそうですが、拡張を拡張したい時に |困る気がします。 | |たとえば、a, a= に加えて print_a というのを加えようとして | |class C | def print_a; print @_v end |end | |とするとうまくいきません。 そうですね。これは @_v をアクセス(privateな)accessorでごまか すなどの方法は考えられないでもないですが、別の名前の衝突の危 険を招くだけかもしれません。 |結局のところ、これは拡張の対象が何なのかをある程度明示的に与えない限り |解決できないと思います。逆にいえば、拡張関係を明示的に与えればプライベー |トインスタンス変数のスコープを素直に定義できる気がします。静的な意味で |の祖先にあるものだけが参照できるというところはクラス変数のスコープに似 |てますね。 そうかもしれませんねえ。となると、classでもmoduleでもない新 しいなにかを導入する必要がありますね。それがpackageとか selector namespaceなのかもしれませんが。 |なお、同じような問題が selector namespace にも(さらに critical な問題 |として)あるんじゃないかと思います。あるメソッドのスコープの定義は、そ |のメソッドが定義されていることを知りつつ記述されたコードだけから見える |というようになるんじゃないかと思うんですが、そのことをどうやって宣言さ |せるんでしょう? selector namespaceについては、一番しょっちゅう口にする私でさ えも、どのような問題があり、どのように解決すべきか、どのよう に実装すべきかについてほとんど把握してません。 実際に取り掛かれるのはいつになることやら。いろんな論文を読ん でるとしょっちゅう「あ、これはselector namespaceで解決できる んじゃ」とは感じるのですが、具体化するのは全然別の話ですね。 というか、だれかが研究ネタにしてくれるとそれはそれで望ましい ような。 まつもと ゆきひろ /:|)