知りたいこと
Class
クラスが自身のインスタンスであるModule
クラスを継承しているが、
それを実現している仕組みを知りたい。
詳細
RubyにはClass
クラスとModule
クラスがあり、継承関係は
Object
> Module
> Class
です。
ですが、Class
クラスが継承しているModule
クラスはClass
クラスのインスタンスです。
またClass
クラス自身もClass
クラスのインスタンスです。
ついでにClass
の親クラスであるObject
クラスもClass
クラスのインスタンスです。
当たり前ではありますが...。
rb
1Class.superclass 2#=> Module 3 4Module.instance_of?(Class) 5#=> true 6 7Class.instance_of?(Class) 8#=> true 9 10Object.instance_of?(Class) 11#=> true
リファレンスには
個々のクラスはそれぞれメタクラスと呼ばれる名前のないクラスをクラスとして持っていて、Class はそのメタクラスのクラスです。
とありますが、利用する上では重要でないとして詳しくは書かれていません。
一応自分で調べるつもりではあり、「Rubyのしくみ」という書籍を購入しましたが、
もしこの辺りのことを既にご存知の方がいましたら事前知識としてアドバイスしていただきたいです。
現在の理解
現在の理解はざっくりとですが以下の通りです。
- 「クラス」と「クラス名」を分けて考える必要がある
- 「クラス名」が
Class
クラスのインスタンスであり、その「クラス」の実態を参照できる - この「クラス」にあたるものがメタクラスである
これで正しいのか自信はないです。
また、詳しいことは何もわかっていません。
間違いの指摘や詳しいアドバイスをお持ちしております。
自身で納得のいく理解ができた時点で自己解決とします。
(もちろん完璧な回答があればそれがベストアンサーです。)
回答2件
あなたの回答
tips
プレビュー