singleton method Class.new

new(superclass = Object) -> Class[permalink][rdoc][edit]
new(superclass = Object) {|klass| ... } -> Class

新しく名前の付いていない superclass のサブクラスを生成します。

名前のないクラスは、最初に名前を求める際に代入されている定数名を検索し、見つかった定数名をクラス名とします。



p foo = Class.new   # => #<Class:0x401b90f8>
p foo.name          # => nil
Foo = foo           # ここで p foo すれば "Foo" 固定
Bar = foo
p foo.name          # => "Bar"  ("Foo" になるか "Bar" になるかは不定)

ブロックが与えられた場合、生成したクラスを引数としてクラスのコンテキストでブロックを実行します。以下のコードと同じです。



klass = Class.new(superclass)
klass.module_eval {|m|
  # ...
}
klass

この場合も生成したクラスを返します。ブロックの実行は Class#initialize が行います。

[PARAM] superclass:
生成するクラスのスーパークラスを指定します。


k = Class.new{|c|
  def initialize
    p "in initialize"
  end

  def hoge
    p "hoge hoge hoge"
  end
}
o = k.new              #=> "in initialize"
o.hoge                 #=> "hoge hoge hoge"