第二次如何要求
问题描述:
有没有办法强制require
- 文件第二次?第二次如何要求
我正在写一个位于Ruby路径中的库。我正在编辑该文件,同时在IRB中对其进行简单测试。
每次我对文件进行更改时,我都想重新加载它而不结束IRB会话。使用load
需要每次输入文件的整个路径,并且每次重新启动IRB都需要输入简单测试所需的所有其他变量设置。
我只想要类似require
但允许第二次加载。有没有简单的方法来做到这一点?
答
load
不需要(hmm)完整路径。它期望一个完整的文件名和扩展名。
p load 'date.rb' #=> true
p load 'date.rb' #=> true
p load 'date' #=> LoadError
+0
我知道是否有“.rb”之间的区别,但我不知道有关路径。 – sawa 2012-04-25 02:20:30
答
:000> path = "extremely/long/path/to/my/file"
:001> load path
:002> load path
答
你可以写你自己的,并把它放在你的.irbrc:
新的辣味
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
对于旧版本,如果您想要支持RubyGems,则必须使其更加健壮。与这两种解决方案
的一个问题是,虽然这将迫使重装有问题的文件,如果是文件又呼吁其他require
(如通常与宝石的情况下),这些文件将不重新加载。
解决这个问题真的很难看。就像,也许手动伸入$LOADED_FEATURES
阵列,并将所有看起来与该宝石名称相关的路径取出。 不寒而栗
IRB是你唯一的选择吗?你可以用'撬'吗? – 2013-12-21 23:52:13