2013-06-18 44 views
5

如果我在源代碼中看到require如何確定所需的模塊是來自寶石還是核心模塊?

require "blah" 

如何或者確定它是否從安裝寶石來到如果庫(「嗒嗒」)是由核心Ruby安裝提供?

+0

絕對沒有什麼在Ruby Core中需要'require'-ing。也許你的意思是[標準庫](http://ruby-doc.org/stdlib-2.0/)? –

回答

1

您可以閱讀$LOADED_FEATURES並檢查是否路徑來自寶石或沒有,這意味着如果該功能屬於核心安裝或正在測試不。

# return true if library is an external gem 
$LOADED_FEATURES.grep(/library/).grep(/gems/).size > 0 
+0

我想這個工程。我也測試了一下。但我感到失望的是它不在元數據中,而是在文件系統路徑中尋找關鍵字。好吧。 – DragonFax

1

一旦require找到一個加載的庫文件,它將該文件的完整路徑添加到$LOADED_FEATURES陣列。所以,你可以看看該數組中,看看它發現blah

$LOADED_FEATURES.find_all { |path| puts path if /blah/ =~ path } 
+0

'$ LOADED_FEATURES.select {| path | path.include?('what to find')}'適合這個,它返回一個數組,並且你可以使用你想要的。 – vgoff