高橋です。お答え頂きありがとうございます。

<E10CHdf-0000Ep-00 / ev.netlab.co.jp>の記事において
matz / netlab.co.jpさんは書きました。

>> MainModuleでConstをインクルードしてもそれはSubModuleには引き
>> 継がれないからです.MainModuleとSubModuleには継承関係はあり
>> ませんから.

なるほど。しかしそうするといっそう、
>> |  そもそも、module 内で module を定義するメリットって何でしょう?
この疑問の答えが分からなくなります。つまり、

module MainModule
	....
  module SubModule
	  ....
  end
end

というのと

module MainModule
	....
end
module SubModule
	....
end

と書いた場合との違いが分かりません。
好みの問題と言われればそれまでですが、
何かメリットがあって最初のような書き方をするのなら
それを知りたいです。


>> |# なんでこんなこと聞くかというと、TkBalloon クラスを自作してたら
>> |overrideredirect のところで Uninitialized constant None と
>> |怒られたからなんです。
>> 
>> Tk::WmはTkCommを既にincludeしているクラスにincludeして使うこ
>> とを想定していました.TkBalloonクラスでのWmの使い方によりま
>> すが,明示的に include TkComm しておいた方が良い場合がありま
>> したでしょうか?

例えば、Window Manager の飾りとかのない hello world スクリプトとして、

#!/usr/local/bin/ruby

require 'tk'

root = TkRoot.new
root.overrideredirect 1
TkButton.new(root) {
  text 'hello'
  command proc { puts 'Hello World!'; exit }
  pack
}
Tk.mainloop

と書くと、Uninitialized constant None と怒られます。
はじめに include TkComm を入れると動きますが、
他の Wm module の method は無くても動くのに(例えば title など)、
overrideredirect などの None を使っている method だけは
使う前に include TkComm を入れなくてはいけないというのは不便ですし、
分かりにくいです。
それとも、書き方が間違っているんでしょうか?

-------------------------------------------------------------------
                       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
-------------------------------------------------------------------