下位のネームスペース内のクラスを親に持つクラスの作り方

何てわかりづらいタイトル。コード見たほうが早いです。

class Package < Class.new
  Base = self.superclass
end
Package.ancestors #=> [Package, Package::Base, Object, Kernel, BasicObject]

解説

Class.newで作成したクラスの名前は、定数に代入するまで*1決まらないことを利用して、親クラスに設定した後に定数に代入することで実現しています。

既知の問題点

rdocでは、Packageの親クラスが「Class.new」だと表示されてしまいます。(´・ω・)ションボリ

*1:正確には、定数に代入した後に参照されるまで