また、編集部はこの内容について正確性を保証できません。
ヒューマンリソシア株式会社はコラム「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 # => #<0x10ffbc0>0x10ffbc0>
>
>
>
>
- この記事のキーワード