如何在Ruby中调度instance_methods?

instance_methods被定义为Module类中的公共实例方法。 为什么以及如何能够调用Object.instance_methods ,这是类方法调用的语法?

因为instance_methodsModule上的实例方法,所以可以在Module类的任何实例或它的子类上调用该方法。

事实certificate, Object Class类的一个实例:

 Object.instance_of? Class #=> true 

而且, ClassModule的子类:

 Class < Module #=> true 

这是一个有用的图表,说明了Ruby中各种对象的类层次结构。 注意Module是如何被列为Class的超Class ,Ruby中的所有类都是以下实例:

Ruby类层次结构

查看完整尺寸

在这种情况下,它看起来像一个类方法,但在Ruby中,Object只是一个Class的实例,它将Module作为超类。 所以看起来像这里的类方法实际上是一个实例方法调用类Class的实例Object。

 Object.instance_of? Class # => true Object.is_a? Module #=> true 

没有“类方法调用的语法”这样的东西。 也没有“类方法”这样的东西。

这只是方法调用,就像任何其他方法调用一样。 您正在调用常量Object引用的对象上的方法instance_methods 。 该对象是Object类,它是Class类的一个实例。 ClassModule的子类,因此Object类是Module类的(间接)实例,它定义了instance_methods方法。