Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Classクラス

class Class

クラスの継承リスト: Class < Module < Object < Kernel < BasicObject

Abstract

クラスのクラスです。

より正確に言えば、個々のクラスはそれぞれメタクラスと呼 ばれる名前のないクラスをクラスとして持っていて、Class はそのメタ クラスのクラスです。この関係は少し複雑ですが、Ruby を利用するにあたっ ては特に重要ではありません。

クラスとモジュールには

という違いがありますが、それ以外のほとんどの機能は Module から継 承されています。Module のメソッドのうち

は Class では未定義にされています。

特異メソッド

new(superclass = Object) -> Class
new(superclass = Object) {|klass| ... } -> Class

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

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

p foo = Class.new   # => #<Class:0x401b90f8>
p foo.name          # => ""
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"

インスタンスメソッド

_load(str) -> Class

Object#_dump を参照して下さい。

[PARAM] str:
Ruby のオブジェクトがダンプされた文字列を指定します。
allocate -> object

自身のインスタンスを生成して返します。生成したオブジェクトは 自身のインスタンスであること以外には何も特性を持ちません。

new(*args, &block) -> object

自身のインスタンスを生成して返します。 このメソッドの引数はブロック引数も含め Object#initialize に渡されます。

new は Class#allocate でインスタンスを生成し、 Object#initialize で初期化を行います。

[PARAM] args:
Object#initialize に渡される引数を指定します。
[PARAM] block:
Object#initialize に渡されるブロックを指定します。
superclass -> Class | nil

自身のスーパークラスを返します。

ただし BasicObject.superclass は nil を返します。

privateメソッド

inherited(subclass) -> ()

クラスのサブクラスが定義された時、新しく生成されたサブクラスを引数 にインタプリタから呼び出されます。このメソッドが呼ばれるタイミングは クラス定義文の実行直前です。

[PARAM] 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

追加されるメソッド

to_yaml(opts = {}) [added by yaml]

例外を発生する。

[PARAM] opts:
YAMLドキュメント出力の際のオプションを指定するが使われない。
[EXCEPTION] TypeError:
require 'yaml'

begin
  cc = Class.new
  cc.to_yaml
rescue
  p $!
  #=> #<TypeError: can't dump anonymous class Class>
end

Methods

Classes