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.
其他很棒的方法.检查是另一个.
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中检查和反映那样有趣.
快乐探索 -
佩里
要找出实例变量,可以Kernel#instance_variables像Zabba指出的那样使用.
对于对象上可用的方法,我my_object.methods - Object.methods用来找出我的对象可用的非显而易见的方法.这缩小了列表并且非常容易阅读.