獲取所需寶石列表的最佳方式是什麼?獲取所需寶石列表
- 僞變量
$"
(裝載功能)給加載的所有文件,其中一些是由寶石內部加載文件的列表,以及其它的是加載非寶石文件。 Gem::Specification.map(&:name)
給出系統上安裝的所有寶石,包括當時未加載的寶石。
我想要這些,即在此刻加載的寶石(主文件)列表的交集。但是由於前者指向文件的完整路徑,如.so
,.rb
,而後者指向的文件名稱爲.gem
,匹配它們並取交點並不是微不足道的。
獲取所需寶石列表的最佳方式是什麼?獲取所需寶石列表
$"
(裝載功能)給加載的所有文件,其中一些是由寶石內部加載文件的列表,以及其它的是加載非寶石文件。Gem::Specification.map(&:name)
給出系統上安裝的所有寶石,包括當時未加載的寶石。我想要這些,即在此刻加載的寶石(主文件)列表的交集。但是由於前者指向文件的完整路徑,如.so
,.rb
,而後者指向的文件名稱爲.gem
,匹配它們並取交點並不是微不足道的。
您可以使用
Gem.loaded_specs
它返回的寶石名稱的Hash
(如Strings
)到Gem::Specification
對象。
我想通了。
Gem::Specification
.select{|g| g.instance_variable_get(:@loaded)}
.map(&:name)
將返回加載的寶石的名稱。
我想,這可能會爲你做的伎倆:
Gem::Specification.select do |gem|
$".find{|f| f.start_with?(gem.full_gem_path)}
end.map(&:name)