Ruby 如何知道我是否需要图书馆

Ruby 如何知道我是否需要图书馆,ruby,gem,rake,Ruby,Gem,Rake,有没有任何方法可以实现类似于此伪代码的操作 puts was_required?('my-library') => false require('my-library') puts was_required?('my-library') => true 我想通过它的require name来测试我是否需要一些库,无论是gemo还是Rake任务 如果gem加载的类可用,我可以测试gem测试,但是我非常喜欢使用库名而不是类名进行测试 对于rake任务也是一样的。我可以在Rake.ta

有没有任何方法可以实现类似于此伪代码的操作

puts was_required?('my-library')
=> false

require('my-library')
puts was_required?('my-library')
=> true
我想通过它的require name来测试我是否需要一些库,无论是gemo还是Rake任务

如果gem加载的类可用,我可以测试gem测试,但是我非常喜欢使用库名而不是类名进行测试

对于rake任务也是一样的。我可以在
Rake.tasks
中找到我需要的库中的任务,因为我想使用库名称进行测试,没有任务名称


谢谢

也许您想玩一下
$LOADED\u功能(别名为
$”
),该数组包含
模块名
加载的
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
方法中所做的。

谢谢!那
$LOADED\u功能正是我所需要的。虽然我对你建议的rexeg有一个问题。如果我删除“lc”,它找不到所需的文件“在正则表达式开始时,它运行良好。知道吗?我从
IRB::Locale
的源代码中复制了这个regexp。因此,
lc
似乎是特定于其工作的IRB控制台的。我更新了我的答案,并删除了该部分,使其在IRB控制台之外工作。