要約
クラスのクラスです。
より正確に言えば、個々のクラスはそれぞれメタクラスと呼ばれる名前のないクラスをクラスとして持っていて、Class はそのメタクラスのクラスです。この関係は少し複雑ですが、Ruby を利用するにあたっては特に重要ではありません。
クラスとモジュールには
- クラスはインスタンスを作成できるが、モジュールはできない。
- モジュールを他のモジュールやクラスにインクルードすることはできるが,クラスをインクルードすることはできない。
という違いがありますが、それ以外のほとんどの機能は Module から継承されています。Module のメソッドのうち
- Module#module_function
- Module#extend_object
- Module#append_features
- Module#prepend_features
- Module#refine
は Class では未定義にされています。
目次
継承しているメソッド
- Moduleから継承しているメソッド
-
- <
- <=
- <=>
- ===
- >
- >=
- alias_method
- ancestors
- attr
- attr_accessor
- attr_reader
- attr_writer
- autoload
- autoload?
- class_eval
- class_variable_defined?
- class_variables
- const_defined?
- const_get
- const_missing
- const_set
- const_source_location
- constants
- define_method
- freeze
- include
- include?
- included_modules
- inspect
- instance_method
- instance_methods
- method_defined?
- module_eval
- name
- prepend
- private_class_method
- private_instance_methods
- private_method_defined?
- protected_instance_methods
- protected_method_defined?
- public_class_method
- public_instance_method
- public_instance_methods
- public_method_defined?
- remove_class_variable
- remove_method
- to_s
- undef_method
特異メソッド
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"
インスタンスメソッド
_load(str) -> Class
[permalink][rdoc][edit]-
Object#_dump を参照して下さい。
- [PARAM] str:
- Ruby のオブジェクトがダンプされた文字列を指定します。
allocate -> object
[permalink][rdoc][edit]-
自身のインスタンスを生成して返します。生成したオブジェクトは自身のインスタンスであること以外には何も特性を持ちません。
klass = Class.new do def initialize(*args) @initialized = true end def initialized? @initialized || false end end klass.allocate.initialized? #=> false
new(*args, &block) -> object
[permalink][rdoc][edit]-
自身のインスタンスを生成して返します。このメソッドの引数はブロック引数も含め Object#initialize に渡されます。
new は Class#allocate でインスタンスを生成し、 Object#initialize で初期化を行います。
- [PARAM] args:
- Object#initialize に渡される引数を指定します。
- [PARAM] block:
- Object#initialize に渡されるブロックを指定します。
# [[c:Class]] クラスのインスタンス、C クラスを生成 C = Class.new # => C # [[c:Class]] クラスのインスタンス、C クラスのインスタンスを生成 C.new # => #<C:0x00005623f8b4e458>
superclass -> Class | nil
[permalink][rdoc][edit]-
自身のスーパークラスを返します。
File.superclass #=> IO IO.superclass #=> Object class ;Foo end class Bar < Foo; end Bar.superclass #=> Foo Object.superclass #=> BasicObject
ただし BasicObject.superclass は nil を返します。
BasicObject.superclass #=> nil
privateメソッド
inherited(subclass) -> ()
[permalink][rdoc][edit]-
クラスのサブクラスが定義された時、新しく生成されたサブクラスを引数にインタプリタから呼び出されます。このメソッドが呼ばれるタイミングはクラス定義文の実行直前です。
- [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