Ruby クラスメソッド ~ビリー・エリオット~

ヒューマンリソシア

2015年7月2日 13:32

※この記事は読者によって投稿されたユーザー投稿のため、編集部の見解や意向と異なる場合があります。 また、編集部はこの内容について正確性を保証できません。
ヒューマンリソシア株式会社はコラム「Ruby クラスメソッド ~ビリー・エリオット~」を公開しました。 今回もRubyの不思議を少しだけ垣間見ることにします。 前回のコラムでは、特異クラス/特異メソッドについて解説しました。特定のインスタンスだけに機能追加が可能でこれが特異メソッドでした。 特異メソッドの一種という事でクラスメソッドの正体を明かしたのですが、「クラスメソッドはクラス自身の特異クラスにあることになります。」 ここで疑問が湧きます。クラスの特異クラスとは何のことなのでしょう?  操作する対象であるインスタンスが、ある特定のインスタンスだけのためのクラスを持つという概念が特異クラスですが、本来設計図であるはずのクラスがインスタンス同様に特異クラスを持つというのが解せません。  リファレンスマニュアルに因れば、「Rubyでは、クラスもオブジェクトの一つでClassクラスのインスタンスです。」という記載があります。 非常に判りづらいですが、「クラスのクラス」つまりメタクラスとして「Classクラス」が存在するのだそうです。 | class Any; end | any = Any.new | p any.class # => Any | p Any.class # => Class | p String.class # => Class | p Fixnum.class # => Class | p Object.class # => Class  全てのクラスはClassクラスのインスタンスだったのです。 クラス定義をClassクラスのインスタンス化として考えれば、 | p foo = Class.new # => # | p foo.name # => nil | Foo = foo # 名前のないクラスに定数を指定 | p foo.name # => “Foo” | p foo.class # => Class | foo_obj = Foo.new # Fooクラスのインスタンスを生成 | p foo_obj.class # => Foo  名前のないクラスに定数を指定することでクラス名になるのです。 この続きは以下をご覧くださいhttp://resocia.jp/column/809/
この記事のキーワード

人気記事トップ10

人気記事ランキングをもっと見る