为此,您需要查看 Ruby 对象模型的外观。
![Ruby 对象模型图](https://i.stack.imgur.com/tBVGQ.png)
这意味着使用关键字创建的类class
将始终是Object
默认情况下的子类。Class
不是你的类的超类Order
,而是类的一个实例Class
。Module#ancestors
将包括mod 中包含的模块列表(包括 mod 本身)和您的类 Order 的超类。
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
。