2011-04-25 56 views
21

當我進入IRB並輸入一個不存在的命令,我得到一個錯誤,說明從irb獲取所有本地變量或可用方法?

"undefined local variable or method 'my_method' for main:Object (NameError)" 

有沒有辦法,只是得到一個什麼樣的局部變量或方法是可用列表?這對於探索Ruby來說非常有用。

回答

23

查找內核,對象和模塊中的方法:例如local_variablesinstance_methodsinstance_variables

那裏的其他偉大的方法。 inspect是另一個。

+0

你的意思是'用於顯示實例變量inspect'? – sawa 2011-04-25 04:13:26

+0

@sawa,inspect也會顯示instance_variables(也就是說,除非它已被一個類重寫,以顯示其他的東西) – Zabba 2011-04-25 04:16:40

+0

有人可以解釋這個人如何得到提示:「顯示所有可用的152)方法嗎?」 http://www.youtube.com/watch?v=J_9H1WPV2Ws#t=0m15s – lukemh 2011-05-04 19:15:58

6

要找出實例變量,您可以使用Kernel#instance_variables,正如Zabba指出的那樣。

對於對象上可用的方法,我使用my_object.methods - Object.methods來找出可用於對象的非顯而易見的方法。這縮小了列表的範圍,並且相當容易閱讀。

+0

您應該將其更改爲'my_object.methods.sort - Object.new.methods' - 如果您從my_object的實例方法列表中減去Object的類方法。 – RoUS 2015-07-14 17:36:26

+0

是的。然而在Ruby中,Object.class是'Class'類,它是類'Class'的一個實例,所以它仍然有'Object.methods'中的方法。 – Swanand 2015-07-15 04:19:13

14

重要的答案。
當你探討,你們這些在您的處置:

obj.private_methods 
obj.public_methods 
obj.protected_methods 
obj.singleton_methods 

MyClass.private_instance_methods 
MyClass.protected_instance_methods 
MyClass.public_instance_methods 

用法,如:

obj.public_methods.sort 

可以使評審更加容易了。

一些特殊情況存在像

String.instance_methods(false).sort 

...會給你只能在String類中定義的實例方法,忽略它的任何祖先那裏繼承的類。我希望你知道,你可以在這裏看到更多:http://www.ruby-doc.org/docs/ProgrammingRuby/但它不像在irb中檢查和反射那樣有趣。

快樂探索 -

佩裏

相關問題