Ruby Pry工具中能否编辑在REPL中定义的类?
问题解决:在Pry中编辑REPL内定义的完整类
直接执行edit ClassName打开你在REPL中定义的完整类不可行,原因是Pry的edit命令默认依赖物理文件关联,而REPL中定义的类仅存于内存中,没有对应的文件路径,因此会抛出Cannot find a file for ClassName!的错误。
以下是针对你的需求的替代方案:
1. 逐个编辑类中的方法
针对类内不同类型的方法,可以用精准的edit命令定位编辑:
- 实例方法:执行
edit ClassName#method_name - 类方法:执行
edit ClassName.class_method_name,或先执行cd ClassName再执行edit self.class_method_name - 私有实例方法:直接执行
edit ClassName#private_method_name(Pry可识别并打开私有方法定义)
2. 临时编辑器重写整个类
如果需要一次性修改类的完整结构,可使用edit -c命令打开临时编辑器:
- 在Pry中输入
edit -c - 在弹出的编辑器窗口中编写完整的类定义(比如修改后的
ClassName代码) - 保存并退出编辑器,Pry会自动执行这段代码,覆盖原有的类定义
示例代码:
class ClassName def method_name puts 'updated method output' end def self.class_method_name puts 'updated class method output' end private def private_method_name puts 'updated private method output' end end
3. 文件化管理类定义(推荐长期使用)
如果需要频繁修改类,建议将类代码保存到物理文件中:
- 把类定义写入文件(比如
my_class.rb) - 在Pry中执行
load 'my_class.rb'加载类 - 执行
edit my_class.rb打开整个文件编辑 - 保存文件后,再次执行
load 'my_class.rb'即可更新REPL中的类定义
内容的提问来源于stack exchange,提问作者bst
相关产品推荐
相关产品推荐

