Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中如何调度对实例_方法的调用?_Ruby - Fatal编程技术网

在Ruby中如何调度对实例_方法的调用?

在Ruby中如何调度对实例_方法的调用?,ruby,Ruby,instance\u方法定义为模块类中的公共实例方法。那么,我们为什么以及如何能够调用类方法调用的语法Object.instance\u methods?在这种情况下,它看起来像一个类方法,但在Ruby中,对象只是类的一个实例,它将模块作为一个超类。所以这里看起来像类方法的实际上是类的实例对象上的实例方法调用 Object.instance_of? Class # => true Object.is_a? Module #=> true 没有所谓的“类方法调用语法”。也没有所谓的

instance\u方法
定义为
模块
类中的公共实例方法。那么,我们为什么以及如何能够调用类方法调用的语法
Object.instance\u methods

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

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

没有所谓的“类方法调用语法”。也没有所谓的“类方法”

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

因为是
模块
上的实例方法,该方法可以在
模块
类或其子类的任何实例上调用

事实证明,
对象
类的一个实例:

Object.instance_of? Class
#=> true
而且,
模块
的子类:

Class < Module
#=> true
Class正确
下面是一个有用的图表,说明Ruby中各种对象的类层次结构。请注意,
Module
是如何作为
Class
的超类列出的,Ruby中的所有类都是其实例:


您如何声明不存在类方法这类东西的可能重复。ruby中几乎所有的类都有类和实例方法。还有一个名为Method;)的类@engineersmnky:不,没有类方法。我们所谓的“类方法”实际上只是对象上的单例方法,而对象恰好是一个类。但实际上,也没有单例方法,我们称之为“单例方法”实际上只是单例类的常规旧实例方法。所以,“类方法”实际上只是一个对象的单例类的常规旧实例方法,它恰好是一个类。在这种情况下::singleton_方法不应该返回与say::methods相同的结果吗?BasicObject是如何陷入这一困境的。我不想争论,我只是觉得这很有趣。