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

> evalのことを考えなければスコープ(class/module ..endの範囲)ご
> とに一意のIDを割り当て、それをprefixにするというのが一番簡単
> そうですね。

ふむ。衝突を避けるだけならそれでも良さそうですが、拡張を拡張したい時に
困る気がします。

たとえば、a, a= に加えて print_a というのを加えようとして

class C
  def print_a; print @_v end
end

とするとうまくいきません。

結局のところ、これは拡張の対象が何なのかをある程度明示的に与えない限り
解決できないと思います。逆にいえば、拡張関係を明示的に与えればプライベー
トインスタンス変数のスコープを素直に定義できる気がします。静的な意味で
の祖先にあるものだけが参照できるというところはクラス変数のスコープに似
てますね。

なお、同じような問題が selector namespace にも(さらに critical な問題
として)あるんじゃないかと思います。あるメソッドのスコープの定義は、そ
のメソッドが定義されていることを知りつつ記述されたコードだけから見える
というようになるんじゃないかと思うんですが、そのことをどうやって宣言さ
せるんでしょう?

(MixJuice に影響されている)私は require をその拡張関係や宣言に流用する
ことを考えてしまうわけですが、require は toplevel 以外にも書けるのでな
かなか難しいのかも知れません。どちらかというと require 以外の何かを導
入したほうがいいのかも。
-- 
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)