初めて参加する高橋と申します。よろしくお願いします。

  module について分からないことがあります。

module MainModule
  CONST = 1
  module SubModule
    def const
      p CONST
    end
  end
end

class Hoge
  include MainModule
  include SubModule
end

hoge = Hoge.new
hoge.const

これは期待通りに 1 を出力してくれますが、

module Const
  CONST = 1
end

module MainModule
  include Const
  module SubModule
    def const
      p CONST
    end
  end
end

(以下同じ)

とすると、Uninitialized constant CONST (NameError) と怒られてしまいます。
さらに分からないのは、

class Hoge
  include MainModule
  include SubModule
end

hoge = Hoge.new
hoge.const

の代わりに

include MainModule
include SubModule

const

とやると、今度はどちらでもちゃんと 1 を出力してくれることです。
これは何故なんでしょうか?

  そもそも、module 内で module を定義するメリットって何でしょう?
関連する method をひとまとめにするというなら、
別々に定義するのと変わらないですよね?
先の例では
include MainModule
include SubModule
両方書かないとエラーになるし。


# なんでこんなこと聞くかというと、TkBalloon クラスを自作してたら
overrideredirect のところで Uninitialized constant None と
怒られたからなんです。
一応、
module Tk
  module Wm
    include TkComm
  end
end
としたら動くようになったんですけど、、、

-------------------------------------------------------------------
                       TAKAHASHI Hitoshi
               Experimental Nuclear Physics Group
             Department of Physics, Kyoto University
            E-mail: thitoshi / ne.scphys.kyoto-u.ac.jp
   URL: http://www.ne.scphys.kyoto-u.ac.jp/~thitoshi/member.html
-------------------------------------------------------------------