为什么Ruby告诉我:class是在Class(Kernel)上定义的而不是Object?

时间:2016-04-03 02:06:24

标签: ruby metaprogramming

使用Ruby中的任何类并询问某些方法的定义:

Object.method :name
#<Method: Class(Module)#name>

好的,太好了。所以,我可以使用pry或者访问ruby-doc.org并阅读关于Module上定义的:name方法。

我的问题是,这里发生了什么:

Object.method :class
#<Method: Class(Kernel)#class>

我没有看到在内核模块上定义:class方法的位置。我看到它在Object类上定义。有人可以为我澄清一下吗?

1 个答案:

答案 0 :(得分:6)

内核模块包含在Object类中,因此它的方法在每个Ruby对象中都可用。

内核实例方法记录在Object类中,而模块方法在此处记录。这些方法在没有接收器的情况下调用,因此可以以函数形式调用。

参考:http://ruby-doc.org/core-2.3.0/Kernel.html