4

一見したところ、 (read: inherits from )BasicObjectを「敷設」するだけだと思いましたClassClassBasicObject

Class.ancestors #=> [Class, Module, Object, Kernel, BasicObject]
Module.ancestors #=> [Module, Object, Kernel, BasicObject]
Object.ancestors #=> [Object, Kernel, BasicObject]
BasicObject.ancestors #=>[BasicObject] 

しかし、物事は突然非常に奇妙になりました。

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

「あはは!」と思いましClassBasicObject = Class.newClassしかし、これらのインスタンスはすべて、最下部にある階層にあることを思い出しましたClass < Module < Object < Kernel < BasicObject

これらのクラスはそれぞれ同時にオブジェクトです。次に、システムは非常に循環的に見えます。階層はどこから始まり、Ruby の抽象的な構造を形成するためにどのように融合するのでしょうか?

4

2 に答える 2

2

私の美しい図を追加するためにゾンビの質問を再度開いてください:)

*Class*
  ↓
BasicObject ~= 'Parent class of all classes but "inherits" from [Class] - causing an interrelated loop'
  ↓
Object      ~= Class.new(BasicObject) {}
  ↓
Module      ~= Class.new(Object) {}
  ↓
*Class*     ~= Class.new(Module) {}
于 2014-06-10T03:53:04.893 に答える
1

Ruby では、すべてがオブジェクト (< BasicObject) であり、クラスもそうです。クラスは、クラス Class のオブジェクトです。クラス Object のオブジェクトは、必ずしもクラスではありません。ただし、クラス オブジェクトは必然的にクラスであり、クラス BasicObject も同様です。了解した?いいえ?次へ移りましょう。(マッツが彼のイントロで言っているように:)))

(言い換えれば、あなたはそれを正しく理解しました。)

于 2012-05-31T23:15:11.737 に答える