从irb获取所有局部变量或可用方法?

时间:2011-04-25 03:40:05

标签: ruby reflection irb

当我进入irb并输入一个不存在的命令时,我收到一条错误说明

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

有没有办法获得哪些局部变量或方法可用?这对于探索ruby非常有用。

3 个答案:

答案 0 :(得分:23)

在内核,对象和模块中查找方法:例如local_variablesinstance_methodsinstance_variables

其他很棒的方法。 inspect是另一个。

答案 1 :(得分: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中检查和反映那么有趣。

快乐探索 -

佩里

答案 2 :(得分:6)

要查找实例变量,您可以使用Kernel#instance_variables作为Zabba指出。

对于对象上可用的方法,我使用my_object.methods - Object.methods来找出我的对象可用的非显而易见的方法。这缩小了列表,并且相当容易阅读。