Class には、Class のインスタンスである Superclass BasicObject を持つスーパークラス Object を持つスーパークラス Module があります。Class も Module のサブクラスです。
私はこれに関して本当に混乱しています(上記は、上記の各オブジェクトで .class および .superclass メソッドを使用して収集されたものです)
ここで何が起こっているのか正確に説明できる人はいますか?
Class には、Class のインスタンスである Superclass BasicObject を持つスーパークラス Object を持つスーパークラス Module があります。Class も Module のサブクラスです。
私はこれに関して本当に混乱しています(上記は、上記の各オブジェクトで .class および .superclass メソッドを使用して収集されたものです)
ここで何が起こっているのか正確に説明できる人はいますか?
「インスタンスの」というフレーズは、ここで行う必要がある頭の体操の小さいながらも重要な部分です。
それと、タイプ のオブジェクトClass
、および というクラスObject
です。
少なくともゆっくりと繰り返しながらこれらを理解できれば、あなたはそれを理解しています:
Object.new
クラスObjectのインスタンスを作成します
Object
それ自体がクラスClassのオブジェクトであるクラスObjectへの参照です。
Class
クラスClassの参照であり、クラスClassのオブジェクトでもあります(!)
Class.new
クラスClassのインスタンスを作成します。
class Foo
Foo = Class.new( String )
、ほとんど同じですclass Foo < String; end
、 、のクラス階層はClass
、Ruby での実装の詳細です。ほぼすべてのクラスが から継承されているため、これも当然のことです。Module
Object
Object
Class
残りは繰り返しの使用と経験です。
ここで別のことが起こっていることに注目する価値があります: 入力するコードのラベルはシンボル/変数名であり、型を持ち、データを含む基本オブジェクトへのポインターです。これらのラベルを直接使用する必要はありません。他の Ruby 変数とほとんど同じです。
o_klass = Object
o_instance = o_klass.new
o_instance.class
=> Object