2016-04-03 94 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

相關問題