如何在Ruby中调度instance_methods?

时间:2014-12-23 04:59:57

标签: ruby

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

3 个答案:

答案 0 :(得分:4)

由于instance_methodsModule上的实例方法,因此可以在Module类的任何实例或其子类上调用该方法。

事实证明,Object Class类的一个实例:

Object.instance_of? Class
#=> true

而且,ClassModule的子类:

Class < Module
#=> true

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

Ruby class hierarchy

View full size

答案 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类的一个实例。 ClassModule的子类,因此Object类是定义Module方法的instance_methods类的(间接)实例。