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