2011-01-05 4 views
0

Ruby 라이브러리 Trollop을 사용하여 명령 줄을 구문 분석하려고합니다. 키별로 trollop :: options 해시에 액세스 할 수 없습니까?

#!/usr/bin/ruby 

require 'net/http' 
require 'trollop' 

opts = Trollop::options do 
    opt :src, "src lang", :short => 'i', :type => String 
    opt :dest, "dest lang", :short => 'o', :type => String 
end 

opts.each do |key,val| 
    puts "#{key}: #{val}" 
end 

print opts["src"] 
print opts["dest"] 

는 출력 : opts.each와 해시를 인쇄 할 때

$ ./translate.rb --src he --dest th 
dest_given: true 
src: he 
dest: th 
help: false 
src_given: true 
nilnil 

, 내가 srcdest라는 이름의 키가 볼 수 있고, 그 값은 내가 기대하는 것입니다. 그러나 opts["src"]으로 해시 값에 액세스하는 것이 null을 반환하는 이유는 무엇입니까?

+1

아마 해시 키는 기호입니까? Try opts [: src] – zetetic

+0

그게 전부 였어! 고맙습니다! – freedrull

답변

1

zetetic이 맞으면 키는 기호입니다.

그리고 사실 Enumerable#each에서

은 블록에 기호를 양보했지만 #{...}를 통해 그것을 인쇄 할 때, 루비는 기호에 대한 정의 to_s를 호출하고 일반 이름을 반환합니다.

당신은 루비가 하나 라이너 테스트와 문자열 보간 to_s라고 말할 수 있습니다

>> "ok, #{class A; def to_s; "what fun"; end; self; end.new}, done" 
=> "ok, what fun, done"