2011-01-05 60 views
0

我想解析命令行與紅寶石庫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"] 

這是輸出:

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

opts.each打印出亂碼,我可以看到有一個名爲srcdest鍵和它們的值是我所期望的。但是,爲什麼使用opts["src"]訪問哈希值返回null?

+1

也許哈希鍵是一個符號?試試opts [:src] – zetetic 2011-01-05 19:43:11

+0

就是這樣!謝謝! – freedrull 2011-01-05 20:19:33

回答

1

zetetic是否正確,關鍵是符號。

而事實上Enumerable#each沒有產生一個符號添加到您的塊,而是通過#{...}在印刷時,Ruby調用to_s,這是符號定義,它返回平原的名字。

你可以告訴紅寶石被稱爲to_s字符串插有一個襯墊測試:

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