読者です 読者をやめる 読者になる 読者になる

Classクラスに関する仮説

Object.class #=> Class
Module.class #=> Class
Class.class #=> Class

Class.superclass #=> Module

irbで上記のような結果を得たので、これよりClassクラスってこんな感じじゃないかと思った。あくまで仮説だけどねー。

class Class < Module
  Object = self.new
  Module = self.new
  Class  = self.new

  # ...
end

概念じゃよくわかんないので、ソースコードで考えてみた方がわかりやすい気がする。

  • -

追記

Class.instance_methods(false)
#=> [:allocate, :new, :superclass]

Class.private_methods(false)
#=> [:inherited, :initialize, :initialize_copy]

という結果から、さっきの仮説を少し修正する必要があるっぽい。newはインスタンス・メソッドだということがわかったから。で、newの代わりにインスタンスを作ってるのが、プライベート・メソッドのinitializeっぽい。

class Class < Module
  Object = self.initialize
  Module = self.initialize
  Class  = self.initialize

  # ...
end