2011-01-12 65 views
17

我想知道是否有一個Ruby方法調用,它只顯示由它調用的Ruby對象定義的方法,而不是它的祖先類定義的所有方法,這是methods似乎要做的。如何檢查Ruby對象的方法?

回答

30

methods接受一個可選的布爾參數,它指定是否也列出來自對象的類及其超類的方法或僅列出對象的單例方法。所以你可以做obj.methods(false)只得到在obj上定義的單例方法。

如果你想要的對象的類定義的方法,但不是由它的超類定義的方法,你可以通過調用對象的類instance_methods(false)得到它,所以它的obj.class.instance_methods(false)

1

你有幾個選擇 - object.methodsobject.public_methodsobject.singleton_methods ...這取決於你想要什麼。因爲他們都返回一個數組,你可能想嘗試這樣的:

# obj is the current object 
parent = obj.class.superclass 

methods = (obj.methods - parent.methods) 
+1

你的意思是`parent = obj.class.superclass`,對吧? – sepp2k 2011-01-12 01:43:13

4

我偏愛obj.methods.sort但一些其他的答案是在某些情況下更好,因爲他們描述

您還可以使用obj.methods.sort.grep /foo/查找與正則表達式匹配的方法名稱。 當您瞭解您要查找的內容時,這很有用。

相關問題