Rubyの名前解決は自分の入っているモジュールの兄弟をチェックしない

module Foo
  quux = 1
  class Bar
    def baz
      print quux
    end
  end
  p Bar.new.baz 
  # undefined local variable or method `quux'
end

quuxをdefしても同じ。クラスのメソッド内で修飾なしで使われた名前はまずローカル変数かどうかをチェックして、それから自分のメソッド、親クラスのメソッド・・・とたどっていき、Objectで止まるのだと思われる。

Pythonでは修飾なしの名前はローカル変数をチェックした後、外のスコープへとたどっていき、グローバル(モジュールスコープ)で止まる。self.quuxなら自分のメンバ、親クラスのメンバ、、、とたどってobjectで止まる。

Javaはthisを省略できるけど、どうなってるんだろうか。ネストしたクラスを作った場合に外側のクラスの変数に修飾なしでアクセスできるんだったっけ。

ところでmodule_functionした上で修飾して呼んだら呼べたんだけどこうしないといけないのかな??もっと楽な方法がある??

module Foo
  def quux
    1
  end
  class Bar
    def baz
      print Foo::quux
    end
  end
  module_function :quux
  p Bar.new.baz
end