如何在Ruby中调度instance_methods?
instance_methods
被定义为Module
类中的公共实例方法。 为什么以及如何能够调用Object.instance_methods
,这是类方法调用的语法?
因为instance_methods
是Module
上的实例方法,所以可以在Module
类的任何实例或它的子类上调用该方法。
事实certificate, Object
是 Class
类的一个实例:
Object.instance_of? Class #=> true
而且, Class
是Module
的子类:
Class < Module #=> true
这是一个有用的图表,说明了Ruby中各种对象的类层次结构。 注意Module
是如何被列为Class
的超Class
,Ruby中的所有类都是以下实例:
查看完整尺寸
在这种情况下,它看起来像一个类方法,但在Ruby中,Object只是一个Class的实例,它将Module作为超类。 所以看起来像这里的类方法实际上是一个实例方法调用类Class的实例Object。
Object.instance_of? Class # => true Object.is_a? Module #=> true
没有“类方法调用的语法”这样的东西。 也没有“类方法”这样的东西。
这只是方法调用,就像任何其他方法调用一样。 您正在调用常量Object
引用的对象上的方法instance_methods
。 该对象是Object
类,它是Class
类的一个实例。 Class
是Module
的子类,因此Object
类是Module
类的(间接)实例,它定义了instance_methods
方法。