Objectクラスはすべてのクラスのスーパークラスである
だからObjectクラスに定義されたinstanceメソッドoはすべてのクラスで定義されたinstanceメソッドoになる
ClassクラスもObjectクラスのサブクラスだから
当然instanceメソッドoはClassクラスのinstanceメソッドoになる
一方Classクラスはすべてのクラスの生成クラスである
だからClassクラスのinstanceメソッドとなったoは
すべてのクラスのクラスメソッドself.oになる
この中には当然Objectクラスが含まれているから
Classクラスのinstanceメソッドoは
Objectクラスのクラスメソッドself.oにもなる
ところがObjectクラスはClassクラスのスーパークラスだから
Objectクラスのクラスメソッドになったself.oは
Classクラスのクラスメソッドself.oにもなる
整理しよう
Objectクラスが1つのinstanceメソッドoを持つと
それがClassクラスを含むすべてのクラスのinstanceメソッドoとなり
ClassクラスのinstanceメソッドoがObjectを含むすべてのクラスのクラスメソッドself.oとなり
Objectクラスのクラスメソッドself.oがClassクラスのクラスメソッドself.oとなる
こうしてRuby空間に存在するすべてのクラスには
instanceメソッドoとクラスメソッドself.oが生まれることとなる
ClassクラスはObjectクラスを含むすべてのクラスの母である
従ってすべてのクラスはClassクラスの特性に依存する
一方でClassクラスはその子であるObjectクラスの弟子である
従ってClassクラスはObjectクラスの特性を受け継ぐ
このような多層的循環構造によって
Objectクラスが変わると
Classクラスが変わり
その変化はすべてのクラスを変える
つまりObjectクラスへのオペレーションは
過去の事実(Classクラス)を再定義し
延いては今の世界(すべてのクラス)を再定義する!
そうRubyのObjectクラスは…
時空を超えるタイムマシーンなんだ!
No comments:
Post a Comment