使用pry,可以非常简单地找到定义方法的位置并查看source by edit-method命令.然而,课堂本身没有对应关系.当该类没有自己定义的方法时,很难找到源代码pry.
类是常量,所以它等同于询问在哪里找到定义特定Ruby常量的源.非常感谢你.
Ale*_*lex 13
在ruby中,$"保存通过加载的所有文件名Kernel.load.所以你可以尝试这样的事情:
constant = User
$".detect{|load_path|
load_path.include?(constant.to_s.underscore)
}
Run Code Online (Sandbox Code Playgroud)
注意:该方法underscore是Rails/ActiveSupport的一部分
使用ack,有时如果我达到Pry(和Ruby)的极限我会求助于它.关于它的好处是你可以使用它的shell集成功能从Pry内部调用它,通常只需键入.ack ClassName就可以了,但是它需要在当前目录下的文件中定义类.
如果在当前目录中没有定义类,那么你总是可以求助于查找其中一个方法,从那里获取源位置,然后使用Pry的cat命令显示它(带语法高亮显示)或Pry's 编辑命令直接跳转到其定义.
一个类没有定义任何实例方法的情况是相当罕见的 - 无论如何这样的类通常是无趣的:)
编辑:
最新版本的Pry(0.9.9)现在可以使用普通show-source命令显示模块/类的源代码.然而,它要求模块/类具有至少一个定义的方法
从 Ruby 2.7 开始,有一种更好的方法可以做到这一点,即Module.const_source_location.
> Admin.const_source_location(:LIMIT)
#=> ["SOME_PATH/user.rb", 2]
Run Code Online (Sandbox Code Playgroud)
参考:
用于调试目的的一种巧妙方法:启动控制台(例如使用binding.irb)并重新定义常量。您将收到一条错误消息,其中包含先前的定义路径!
> Foo = ""
(irb):11: warning: already initialized constant Foo
/path/to/foo.rb:1: warning: previous definition of Foo was here
=> ""
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5803 次 |
| 最近记录: |