Ruby: クラスはオブジェクト / クラスと普通のオブジェクトを比べてみる

「クラスはオブジェクト」とは言うけれど、そうは言っても、ふだん普通にベタにクラスを使っているときのイメージが邪魔をして???となってしまう。

じゃあ普通のオブジェクトと並べてみようか、ということで例 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
# これはクラスメソッド

なるほどなるほど。