获取所需宝石列表的最佳方法是什么?
$"
(加载的功能)给出了所有加载文件的列表,其中一些是由gem内部加载的文件,另一些是加载的非gem文件。Gem::Specification.map(&:name)
提供系统上安装的所有宝石,包括当时未加载的宝石。我想要这些的交集,即此刻加载的宝石列表(主文件)。但是,由于前者指向.so
,.rb
等文件的完整路径,后者指向.gem
文件的名称,因此匹配它们并获取交集并非易事。 / p>
答案 0 :(得分:2)
您可以使用
Gem.loaded_specs
它会将Hash
个宝石名称(Strings
)返回给Gem::Specification
个对象。
答案 1 :(得分:1)
我明白了。
Gem::Specification
.select{|g| g.instance_variable_get(:@loaded)}
.map(&:name)
将返回已加载宝石的名称。
答案 2 :(得分:1)
我认为这可能适合你:
Gem::Specification.select do |gem|
$".find{|f| f.start_with?(gem.full_gem_path)}
end.map(&:name)