有没有办法做这样的伪代码?
puts was_required?('my-library')
=> false
require('my-library')
puts was_required?('my-library')
=> true
我希望能够测试我是否需要一些库,无论是Gem o还是Rake任务,都是 require-name 。
如果gem加载的Class可用,我可以测试gem测试,但我真的很想测试使用库名,没有类名。
对于rake任务是一样的。我可以在Rake.tasks
找到我需要的库中的任务,我想用库名测试,不用任务名称
感谢
答案 0 :(得分:1)
也许您想要使用$LOADED_FEATURES
(别名为$"
),该数组包含module names
加载的require
?
def was_required?(file)
rex = Regexp.new("/#{Regexp.quote(file)}\.(so|o|sl|rb)?")
$LOADED_FEATURES.find { |f| f =~ rex }
end
was_required?('uri')
#=> false
require 'uri'
#=> true
was_required?('uri')
#=> true
顺便说一下,这正是Ruby在require
方法中的作用。