2016-04-03 69 views
0

采取任何类在Ruby中,并要求它在那里被定义某些方法:为什么Ruby告诉我:class是在Class(Kernel)而不是Object中定义的?

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

好,太好了。因此,我可以使用pry或转到ruby-doc.org并阅读Module上定义的:name方法。

我的问题是,这到底是怎么回事:

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

我没有看到,其中:类方法是内核模块中定义。我看到它在Object类上定义。有人能为我澄清这一点吗?

回答

6

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

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

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

+0

哈!在我问这个问题之前,我已经完全阅读了这篇文章,但由于某种原因,从你那里读了点击。我想这只是让我困惑,我无法在文档中的内核上找到该方法。 – davidpm4

+0

Ruby很复杂,不觉得糟糕,很高兴我可以帮忙。 – 13aal

相关问题