有没有一种方法可以强制再次require
加载文件?
我正在编写一个位于Ruby路径中的库。在使用IRB简单测试时,我同时编辑这个文件。
每次我更改文件时,我希望重新加载它而不结束IRB会话。使用load
需要每次键入整个文件路径,而每次重新启动IRB都需要输入所有其他变量设置,这些变量是进行简单测试所需的。
我想要像require
一样的东西,但允许第二次加载。有没有简单的方法可以实现?
load
不需要(嗯)完整的路径。它期望一个带有扩展名的完整文件名。
p load 'date.rb' #=> true
p load 'date.rb' #=> true
p load 'date' #=> LoadError
module Kernel
def reload(lib)
if old = $LOADED_FEATURES.find{|path| path=~/#{Regexp.escape lib}(\.rb)?\z/ }
load old
else
require lib
end
end
end
分钟级别的缓存已经失效
module Kernel
# Untested
def reload(lib)
if File.exist?(lib)
load lib
else
lib = "#{lib}.rb" unless File.extname(lib)=='.rb'
$:.each do |dir|
path = File.join(dir,lib)
return load(path) if File.exist?(path)
end
end
end
end
:000> path = "extremely/long/path/to/my/file"
:001> load path
:002> load path
IRB
吗?你可以使用pry
吗? - Darek Nędza