【问题标题】:Can't access trollop::options hash by keys?无法通过键访问 trollop::options 哈希?
【发布时间】:2011-01-06 04:26:37
【问题描述】:

我正在尝试使用 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?

【问题讨论】:

  • 也许哈希键是一个符号?试试 opts[:src]

标签: ruby command-line-arguments


【解决方案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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-30
    • 2016-01-20
    • 2013-03-22
    • 2014-11-22
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多