rubyのrequire
メソッドは lib_path を検索し、必要に応じて見つかった最初の一致ファイルをロードします。ロードされるファイルへのパスを印刷する方法はありますか。私は、理想的には組み込みの、which
bash のコマンドに似た機能を探しており、それも簡単になることを望んでいます。ありがとう。
2 に答える
3
組み込みの機能はわかりませんが、独自の機能を定義するのは難しくありません。これがこの質問から適応された解決策です:
def which(string)
$:.each do |p|
if File.exist? File.join(p, string)
puts File.join(p, string)
break
end
end
end
which 'nokogiri'
#=> /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri
説明:$:
は事前定義された変数です。これは、ファイルを検索できる場所の配列load
ですrequire
。このwhich
メソッドは、各パスを繰り返して、呼び出したファイルを探します。一致するものが見つかると、ファイルパスを返します。
required
のように、出力をファイルの完全なファイルパスを示す1行にするだけでよいと想定していますwhich
。ファイルがそれ自体をロードするファイルも確認したい場合required
は、リンクされた質問の解決策のようなものがより適切かもしれません。
module Kernel
def require_and_print(string)
$:.each do |p|
if File.exist? File.join(p, string)
puts File.join(p, string)
break
end
end
require_original(string)
end
alias_method :require_original, :require
alias_method :require, :require_and_print
end
require 'nokogiri'
#=> /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/rubygems-update-1.3.5/lib/rbconfig
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml/pp
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml/sax
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml/node
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml/xpath
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xslt
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/html
# /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/css
# /opt/local/lib/ruby1.9/1.9.1/racc/parser.rb
于 2010-07-31T22:36:58.590 に答える
1
$ gem which filename # (no .rb suffix) は私が使用するものです...
于 2010-08-01T02:24:12.100 に答える