我正在编辑一个文件,我正在使用irb来测试api:
> require './file.rb'
> o = Object.new
> o.method
然后我希望能够编辑file.rb,并能够立即看到更改。示例:假设我第一次需要file.rb时,new_method不存在:
> o.new_method
哪个会返回错误。是否有沙箱/开发人员模式或方法,我可以实现上述方法,而无需每次都重新加载文件?无论如何,在第一次要求后,要求将无法工作。我假设最坏的情况我不得不使用负载。
答案 0 :(得分:18)
我通常会创建一个这样的简单函数:
def reload
load 'myscript.rb'
# Load any other necessary files here ...
end
有了这个,一个简单的reload
将重新导入我正在处理的所有脚本。它不是自动的,但它是我能够提出的最接近的东西。
当使用不存在的方法调用对象时,您可以覆盖method_missing
以自动调用此函数。我自己从未尝试过,所以我不能给出任何具体的建议。如果您调用的方法已经存在但只是被修改过,那也无济于事。
在我自己的懒惰中,我已经将鼠标上的一个可编程按钮映射到按键序列“reload< enter>”。当我使用irb
时,所需要的只是一个小手指的抽搐来重新加载所有东西。因此,当我不使用irb
时,我最终会无意中插入文档中的字符串“reload”(但这完全是另一个问题)。
答案 1 :(得分:8)
这不会运行每个命令,但您可以在每个IRb会话中包含一个文件。每次启动IRb会话时都会加载~/.irbrc
。
require "~/somefile.rb"
puts "somefile loaded"
> irb
somefile loaded
irb(main):001:0>
每次启动irb会话时都会加载 ~/.irbrc
答案 2 :(得分:1)
ActiveSupport 库中的require_dependency
呢?
require 'active_support/dependencies' #load it at the beginning
require_dependency 'myscript.rb'
然后require_dependency
应跟踪myscript
文件中的更改并重新加载。