ruby의 require
메소드는 lib_path를 검색하고 필요한 경우 찾은 첫 번째 일치하는 파일을로드합니다. 로드 될 파일의 경로를 인쇄 할 여지가 있습니다. 내가 찾고있는, 이상적으로 내장 된, 기능은 bash의 which
명령과 유사하며 그렇게 간단 할 수도 있기를 바란다. 감사.ruby require 메소드가로드 할 파일을 검색 하시겠습니까?
3
A
답변
3
기본 제공 기능에 대해 모르겠지만 자신 만의 기능을 정의하는 것은 어렵지 않습니다. 여기 this question로부터 구성된 용액이다 :
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
메서드는 호출 한 파일을 찾는 각 경로를 반복합니다. 일치하는 항목을 찾으면 파일 경로를 반환합니다.
which
과 같은 required
파일의 전체 파일 경로를 보여주는 한 줄만 출력한다고 가정합니다. 당신은 또한 파일을보고 싶은 경우 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
파일 이름 # (NO .rb 접미사가) 내가 무엇을 사용
1
$ 보석 ...
감사합니다. 나는 내 자신의 구현을 만들 필요가 있다고 느꼈다. BTW, 이것은 1.8 : 1에서는 개별적으로 gem 경로를 $ :에 명시 적으로 포함하지 않기 때문에 루비 1.9에서만 작동하는 것으로 보입니다. –