「クラスはオブジェクト」とは言うけれど、そうは言っても、ふだん普通にベタにクラスを使っているときのイメージが邪魔をして???となってしまう。
じゃあ普通のオブジェクトと並べてみようか、ということで例 2つ。
Ruby のバージョンは 1.8.7。
new
## 1. 普通のオブジェクト A = Object.new A.class # => Object B = String.new B.class # => String ## 2. クラス(Classクラスのインスタンス) C = Class.new C.class # => Class # ふつうにオープンクラスできる class C def meth ; 123 ; end end C.new.meth # => 123
モジュール + extend
module M def meth ; 123 ; end end ## 1. オブジェクトに特異メソッドを追加してみる # A はオブジェクト A = Object.new # オブジェクト A に 特異メソッド meth を追加 A.extend M A.meth # => 123 B = String.new B.extend M B.meth # => 123 ## 2. クラス(のインスタンス)に特異メソッドを追加してみる # C はオブジェクト(Class のインスタンス) C = Class.new # オブジェクト C に 特異メソッド meth を追加 C.extend M C.meth # => 123 # これはクラスメソッド
なるほどなるほど。