获取所需宝石的列表
Getting a list of required gems
获取所需 gem 列表的最佳方法是什么?
- 伪变量
$"
(loaded feature)给出了所有加载文件的列表,其中一些是gems内部加载的文件,另一些是非gem加载的文件。
Gem::Specification.map(&:name)
给出系统中安装的所有gem,包括当时没有加载的
我想要这些的交集,即当前加载的 gems(主要文件)的列表。但由于前者指向.so
、.rb
等文件的完整路径,而后者指向.gem
个文件的名称,因此匹配它们并取交集并非易事。
我想通了。
Gem::Specification
.select{|g| g.instance_variable_get(:@loaded)}
.map(&:name)
将 return 加载的宝石的名称。
我认为这可能对你有用:
Gem::Specification.select do |gem|
$".find{|f| f.start_with?(gem.full_gem_path)}
end.map(&:name)
您可以使用
Gem.loaded_specs
它将 returns Hash
个 gem 名称(如 Strings
)命名为 Gem::Specification
个对象。
参见Ruby documentation or the RubyGems documentation。
获取所需 gem 列表的最佳方法是什么?
- 伪变量
$"
(loaded feature)给出了所有加载文件的列表,其中一些是gems内部加载的文件,另一些是非gem加载的文件。 Gem::Specification.map(&:name)
给出系统中安装的所有gem,包括当时没有加载的
我想要这些的交集,即当前加载的 gems(主要文件)的列表。但由于前者指向.so
、.rb
等文件的完整路径,而后者指向.gem
个文件的名称,因此匹配它们并取交集并非易事。
我想通了。
Gem::Specification
.select{|g| g.instance_variable_get(:@loaded)}
.map(&:name)
将 return 加载的宝石的名称。
我认为这可能对你有用:
Gem::Specification.select do |gem|
$".find{|f| f.start_with?(gem.full_gem_path)}
end.map(&:name)
您可以使用
Gem.loaded_specs
它将 returns Hash
个 gem 名称(如 Strings
)命名为 Gem::Specification
个对象。
参见Ruby documentation or the RubyGems documentation。