无法通过密钥访问trollop :: options哈希?

时间:2011-01-05 19:35:13

标签: ruby command-line-arguments command-line-parsing

我正在尝试使用ruby库Trollop解析命令行。

#!/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 个答案:

答案 0 :(得分:1)

zetetic是正确的,键是符号。

事实上Enumerable#each确实为你的块产生了一个符号,但是当通过#{...}打印它时,Ruby调用to_s,它是为符号定义的,它返回普通名称。

您可以通过单线测试来判断Ruby被称为to_s进行字符串插值:

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