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

Geo*_*uer 22 ruby reflection irb

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

"undefined local variable or method 'my_method' for main:Object (NameError)"
Run Code Online (Sandbox Code Playgroud)

有没有办法获得可用的局部变量或方法的列表?这对于探索ruby非常有用.

Zab*_*bba 24

在内核,对象和模块中查找方法:例如local_variables,instance_methods,instance_variables.

其他很棒的方法.检查是另一个.

  • @lukemh,在`irb`中键入`[1,2] .`并按两次`TAB`.该功能通常称为*完成*/*自动完成*. (2认同)

Per*_*ich 15

很棒的答案.
在您探索时,您可以随意使用这些:

obj.private_methods 
obj.public_methods 
obj.protected_methods 
obj.singleton_methods
Run Code Online (Sandbox Code Playgroud)

MyClass.private_instance_methods 
MyClass.protected_instance_methods 
MyClass.public_instance_methods
Run Code Online (Sandbox Code Playgroud)

用法如下:

obj.public_methods.sort
Run Code Online (Sandbox Code Playgroud)

也可以让评论更容易.

存在一些特殊情况

String.instance_methods(false).sort
Run Code Online (Sandbox Code Playgroud)

...将只提供String类中定义的实例方法,省略从任何祖先继承的类.正如我所料,你可以在这里看到更多:http://www.ruby-doc.org/docs/ProgrammingRuby/但它并不像在irb中检查和反映那样有趣.

快乐探索 -

佩里


Swa*_*and 6

要找出实例变量,可以Kernel#instance_variables像Zabba指出的那样使用.

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