我正在尝试用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打印散列时,我可以看到有名为src和dest的键,它们的值是我所期望的。然而,为什么用opts["src"]访问散列值会返回null呢?
发布于 2011-01-06 04:26:38
zetetic是正确的,钥匙是一个符号。
事实上,Enumerable#each确实为您的块生成了一个符号,但是当通过#{...}打印它时,Ruby会调用to_s,这是为symbol定义的,它返回普通名称。
通过单线性测试可以看出,Ruby被称为to_s,用于字符串插值:
>> "ok, #{class A; def to_s; "what fun"; end; self; end.new}, done"
=> "ok, what fun, done"https://stackoverflow.com/questions/4608411
复制相似问题