【Ruby】クラスを作るということ3

パーフェクトRubyのメタプロの部分を読んでいます。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

前回のまとめ

クラスオブジェクトの考え方の利点は?
Rubyにおける(他の言語もかもだけど)オブジェクト指向の動作は「インスタンスがメソッド実行する」の繰り返し。
クラス定義はClassクラスのnewメソッド。するとClassクラスのインスタンスが作られる。
そのインスタンスが「特異メソッドを定義する」というメソッドを実行するとクラスメソッドが出来上がる。
インスタンスメソッドだけは特殊。
そのクラス定義をもとに作られたインスタンスに対してメソッドを実行できるように定義しないといけないから。

6-3 特異クラス

特異クラスとは?
→特異メソッドが定義されたクラスのこと?

class DataSet
end

specific = DataSet.new

def specific.new_singleton_method
  :new_singleton_method
end

p specific.singleton_class.method_defined? :new_singleton_method

特異メソッドはどこに定義されてるかというと特異クラスに定義されている。
メソッドは例外なくクラス定義内に書かれていなければいけない。
それを実現しようとするもの??

以下のように定義式で書いておくこともできる。

class Klass; end

klass = Klass.new
klass.singleton_class

KLASS_OBJECT = klass
puts class << klass; self; end == KLASS_OBJECT.singleton_class

シングルトンオブジェクト
特異クラスの使い道としてシングルトンオブジェクトがあります。

SINGLETON_OBJECT = Object.new

class << SINGLETON_OBJECT
  def only_method
    :only_method
  end
end

p SINGLETON_OBJECT.only_method
<||
と言っても定数にObjectクラスのインスタンスを入れておいてその特異クラスにどんどんメソッドを定義していくだけですが…