На первый взгляд я думал BasicObject
просто «полагает» Class
(читай: Class
наследуется от BasicObject
)Что входит в Ruby Class или BasicObject?
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
"Ага, подумал я." Мы на самом деле делает экземпляр Class
: BasicObject = Class.new
. Но потом я вспомнил, что все эти случаи сидят в иерархии с Class
внизу: Class < Module < Object < Kernel < BasicObject
.
Каждый из этих классов одновременно является объектом. В свою очередь, система кажется очень круговой. Где начинается иерархия и как она сочетается с самим собой, чтобы сформировать абстрактные конструкции Ruby?
Я бы как ссылку [этот отличный ответ] (http://stackoverflow.com/a/10526013/512904) [Jörg W Mittag] (http://stackoverflow.com/users/2988/jorg-w-mittag). Я думаю, что это дает очень хорошее описание отношений между фундаментальными классами Ruby. –
Прозрачная цитата из этого ответа: «BasicObject, Object, Module и Class все должны возникать одновременно, потому что они имеют круговые зависимости». – fny