2011-01-05 5 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が呼び出され、プレーン名が返されます。

あなたはRubyは1つのライナーの試験で文字列補間のためのto_sと呼ばれていることを伝えることができます。

>> "ok, #{class A; def to_s; "what fun"; end; self; end.new}, done" 
=> "ok, what fun, done" 
関連する問題