Yukihiro Matsumotoさんの
<1042794025.176008.8990.nullmailer / picachu.netlab.jp>から
> |defined?をどうすべきかは判りませんが、前にruby-listで要望が出ていた、
> |外側のモジュールでincludeされた定数は内側から参照できるように変更して
> |欲しい気がします。(外側の階層中では、スーパークラス以上は辿らなくてよいですが)
> 
> これはやっぱ止めた方が良い気がします。個人的にはネストの外側
> はその場で見える定数だけが参照できるようにしたいです。

内側のクラスが複数個あるときに、それぞれでincludeするのが嫌な感じが
したので、外側でのincludeだけで済まないかなと思ったことがあります。
(だけど、定数が多いのでトップレベルではincludeしたくない)

しかし、includeを使用しないで、モジュールの定数定義を複製するメソッドを
用意すれば解決できますね。
(Module#constantsに、継承を含めないようなバリエーションがあると
便利かもしれません)

class Module
  def include_const(m)
    if m.is_a? Module
      #clist = m.constants
      clist = m.constants.select { |c| eval("defined?(m::#{c})") }
      clist.each { |cs| const_set(cs, m.const_get(cs)) }
    end
  end
end

class CS
  X = 10
  Y = 20
end

class C1
  include_const CS
  class C2
    p Y
  end
end
--
小迫@ソフネック   渋谷区恵比寿1-15-1