有没有办法“重新加载”或“刷新”内存中的rubygem?当我在irb中玩游戏时,偶尔我喜欢修改我的gem文件,如果我需要相同的gem,它不会更新到内存中,并给出"false“输出。目前,我必须退出IRB,回到IRB,然后再次要求创业板,必须有一个更好的way...what,是吗?
发布于 2010-08-12 15:38:19
正如其他人所建议的,您可以使用Kernel#load。但是,不要浪费时间查找和加载每个gem文件,因为所有需要的文件都存储在$“中。
def reload(require_regex)
$".grep(/^#{require_regex}/).each {|e| load(e) }
end
例如,如果您在irb中使用hirb gem,则只需使用以下命令重新加载:
>> reload 'hirb'
如果由于某种原因load不起作用(它对文件扩展名比require更挑剔),您可以通过首先删除$“中的条目来重新请求任何文件。
def reload(require_regex)
$".grep(/^#{require_regex}/).each {|e| $".delete(e) && require(e) }
end
选择适合你的那个。就我个人而言,我使用后者。
发布于 2010-08-12 06:01:25
加载'filename.rb‘
一次一个被改变的.
发布于 2010-08-12 06:34:07
一种方法是使用Kernel#load
。除了必须显式地包含文件扩展名之外,您可以像使用Kernel#require
一样使用它。然而,它也有它的缺点(即使像class Foo < Struct.new(:foo); end
这样简单的东西也会失败,因为不可能改变类的超类),所以我也想知道一种更好的方法。
在rails中,您可以在脚本/控制台上使用reload!
来实现这一点,但我不知道他们使用的是哪种魔法。
This gist看起来很有前途,但我还没有测试过它。
https://stackoverflow.com/questions/3463182
复制相似问题