2013-11-28 90 views
1

紅寶石Module有一個方法instance_methods可以返回該類的方法列表。但是如何檢索一個類的類方法列表?如何獲取類方法?

+0

你W¯¯螞蟻*類的方法*被** **僅在該特定的類中定義** **未了繼承(/含),是嗎? –

回答

0
class Song 
    def self.hello;end 
end 
p Song.singleton_methods 

結果:

[:hello] 
2

您可以將false參數傳遞到Object#methods

class Foo 
    def self.bar 
    end 
end 

Foo.methods(false) #=> [:bar] 
+0

將** s **添加到Object#方法及其鏈接。 –

0

好了,如果你有這樣的:

object = Object.new 

,你想要得到的Object(的object父)類方法列表,你可以得到通過:

object.class.methods 

而且如果您有一些課程,比如說Samuel,您可以通過Samuel.methods輕鬆獲得課程方法。您可以這樣做,因爲Samuel類類的實例,因此您可以像從普通對象那樣獲取其方法。

1

你需要知道的第一件事是,有沒有這樣的事情在Ruby中一個類的方法。我們口語上稱之爲「類方法」實際上只不過是一種正常的單例方法。 全部對象可以有單獨的方法,沒有什麼特別的類。

實際上,沒有任何東西作爲單獨的方法!我們口語上稱之爲「單例方法」的東西實際上只是對象單例類的常規無聊實例方法。

所以,既然你已經知道如何列出的實例方法,你現在知道了類方法實際上是實例方法,你已經知道如何回答你自己的問題:

class Foo; def self.bar; end end 

class << Foo 
    instance_methods(false) 
end 
# => [:bar] 

Foo.singleton_class.instance_methods(false) 
# => [:bar] 

然而,即使單方法實際上並不存在,它仍然是有用的談論他們,上述結構是只是足夠的不便,有其執行上述的實際上相當於專門的方法:

Foo.singleton_methods(false) 
# => [:bar] 
+0

當使用singleton_methods,似乎false參數是沒有必要的。 – uncutstone

相關問題