Ответ 1
Для этого вам нужно посмотреть, как выглядит модель объекта Ruby.
Это означает, что классы, созданные с использованием ключевого слова class
, всегда будут подклассом Object
по умолчанию. class
не является суперклассом вашего класса Order
, скорее это экземпляр класса class
. Module#ancestors
будет включать список модулей, включенных в mod (включая сам модем) и суперкласса вашего класса.
class Order;end
Order.superclass # => Object
Order.superclass.superclass # => BasicObject
Order.superclass.included_modules # => [Kernel]
Итак, если вы посмотрите на результат и понимаете приведенный выше код, то ниже вам должно быть ясно:
Order.ancestors #-> [Order, Object, Kernel, BasicObject]
Теперь посмотрим,
class Order;end
Order.class # => Class
Order.instance_of? Class # => true
Order.class.superclass # => Module
Order.class.superclass.superclass # => Object
Order.class.superclass.superclass.included_modules # => [Kernel]
Итак, если вы посмотрите на результат и понимаете приведенный выше код, то ниже вам должно быть ясно:
Order.class.ancestors #->[Class, Module, Object, Kernel, BasicObject]
Тем не менее Order.ancestors
предоставляет вам предков класса Order
, тогда как Order.class.ancestors
дает вам предков class
.