VM のブロック呼び出しについてと定数の検索について。
できたらあとでまとめる。とりあえずほーっと思ったところだけ。
定数の名前空間の検索って実体が持ってるモジュールのネスト関係とは関係なく構文上のスコープで決まるんですよね。こういうのをlexicalなスコープっていうのかな。
つまり
module A B = :Const_B end module A p B # => :Const_B module C p B # => :Const_B end end module A::C p B # => NameError 発生 end
ネストしたモジュールを"::"で直接開くと、外のモジュールの定数が見えないんですよね。
これは時々うっかりまちがってしまって現象としては知ってましたが、実装を少し覗きました。
素人考えだと、この挙動を行なうほうが大変そうなので、実体に即した検索したほうが良かったりはしないんでしょうかね。