10

我目前正在编辑一个文件,并且我正在使用 irb 来测试 api:

> require './file.rb'
> o = Object.new
> o.method

然后我希望能够编辑 file.rb,并能够立即看到更改。示例:假设我第一次需要 file.rb 时 new_method 不存在:

> o.new_method

这将返回一个错误。是否有沙盒/开发人员模式或方法可以实现上述目标,而无需每次都重新加载文件?无论如何,在第一个要求之后,要求将不起作用。我假设在最坏的情况下我不得不使用 load 代替。

4

3 回答 3

20

我通常创建一个这样的简单函数:

def reload
    load 'myscript.rb'
    # Load any other necessary files here ...
end

有了这个,一个简单的reload将重新导入我正在处理的所有脚本。它不是自动的,但它是我能想到的最接近的东西。

method_missing当您的对象使用不存在的方法调用时,您可以重写以自动调用此函数。不过,我自己从来没有尝试过,所以我不能给出任何具体的建议。如果您正在调用一个已经存在但只是被修改过的方法,它也无济于事。

在我自己的懒惰中,我已经将鼠标上的一个可编程按钮映射到键序列“reload<enter>”。当我使用irb时,只需动动小指即可重新加载所有内容。因此,当我使用时irb,我最终会无意中将字符串“reload”插入到文档中(但这完全是一个不同的问题)。

于 2012-06-13T18:25:08.783 回答
9

这不会运行每个命令,但您可以在每个 IRb 会话中包含一个文件。~/.irbrc每次启动 IRb 会话时都会加载。

~/.irbrc

require "~/somefile.rb"

~/somefile.rb

puts "somefile loaded"

终端

> irb
somefile loaded
irb(main):001:0> 

~/.irbrc每次启动 irb 会话时都会加载

于 2012-06-13T19:03:32.207 回答
1

require_dependencyActiveSupport呢?

require 'active_support/dependencies' #load it at the beginning
require_dependency 'myscript.rb'

然后require_dependency应该跟踪myscript文件中的更改并重新加载它。

于 2012-06-13T19:35:40.110 回答