2010-07-31 4 views

답변

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 접미사가) 내가 무엇을 사용
+0

감사합니다. 나는 내 자신의 구현을 만들 필요가 있다고 느꼈다. BTW, 이것은 1.8 : 1에서는 개별적으로 gem 경로를 $ :에 명시 적으로 포함하지 않기 때문에 루비 1.9에서만 작동하는 것으로 보입니다. –

관련 문제