クラスのクラス。より正確に言えば、個々のクラスはそれぞれメタクラスと呼
ばれる名前のないクラスをクラスとして持っていて、Class
はそのメタ
クラスのクラスです。この関係は少し複雑ですが、Ruby を利用するにあたっ
ては特に重要ではありません。
クラスは、モジュールとは
という違いがありますが、それ以外のほとんどの機能は Module から継
承されています。Module
のメソッドのうち
は Class
では未定義にされています。
Class.new([superclass])
Class.new([superclass]) {|klass| ... }
新しく名前の付いていない superclass のサブクラスを生成します。
superclass が省略された時にはObject
のサブクラスを生成
します。
名前のないクラスは、最初に名前を求める際に代入されている定数名を検 索し、見つかった定数名をクラス名とします。
p foo = Class.new # => #<Class:0x401b90f8> p foo.name # => "" Foo = foo # ここで p foo すれば "Foo" 固定 Bar = foo p foo.name # => "Bar" ("Foo" になるか "Bar" になるかは不定)
ruby 1.7 feature: ブロックが与えられると生成したクラスをブロックの引数に渡し、クラス のコンテキストでブロックを実行します。この場合も生成したクラスを返 します。
klass = Class.new(super) klass.module_eval {|m| ... } klass
と同じです。ブロックの実行は Module#initialize が行います。
allocate ((<ruby 1.7 feature>))
クラスのインスタンスを生成して返します。生成したオブジェクトは (通常)クラスのインスタンスであること以外には何も特性を持ちません。
new( ... )
クラスのインスタンスを生成して返します。このメソッドの引数はブロック引数も 含め initialize に渡されます。
ruby 1.7 feature: version 1.7 では、new は、allocate でイン スタンスを生成し、initialize で初期化を行うメソッドです。
superclass
クラスのスーパークラスを返します。
inherited(subclass)
クラスのサブクラスが定義された時、新しく生成されたサブクラスを引数 にインタプリタから呼び出されます。このメソッドが呼ばれるタイミングは クラス定義文の実行直前です。
class Foo def Foo.inherited(subclass) puts "class \"#{self}\" was inherited by \"#{subclass}\"" end end class Bar < Foo puts "executing class body" end # => class "Foo" was inherited by "Bar" executing class body