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

dav*_*pm4 0 ruby metaprogramming

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

Object.method :name
#<Method: Class(Module)#name>
Run Code Online (Sandbox Code Playgroud)

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

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

Object.method :class
#<Method: Class(Kernel)#class>
Run Code Online (Sandbox Code Playgroud)

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

13a*_*aal 6

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

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

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