クラスやモジュールは全て定数として保存される

トップレベルにクラスを定義する


# 元々のObjectクラスにはOuterという名前の定数は存在しないが
puts Object.const_defined?(:Outer) => false
# Outerクラスを定義すると
class Outer
end
# Outerという名前の定数ができる
puts Object.const_defined?(:Outer) => true
クラスを定義すると、そのクラスはObjectクラスの定数(名前がクラス名で値がClassオブジェクト)となる。

クラスの中でクラスを定義する


class Outer
# 元々のOuterクラスにはInnerという名前の定数は存在しないが
puts Outer.const_defined?(:Inner) => false
# 内部にInnerクラスを定義すると
class Inner
end
# Innerという名前の定数ができる
puts Outer.const_defined?(:Inner) => true
end
ネストクラスを定義すると、子クラスは親クラスの定数となる。