【问题标题】:in Ruby, OptionParser returns boolean instead of input values在 Ruby 中,OptionParser 返回布尔值而不是输入值
【发布时间】:2016-04-28 09:04:37
【问题描述】:

我正在尝试使用 OptionParser 获取参数值。 我的代码只返回布尔值,而不是值:

require 'optparse'

options ={}
opts = OptionParser.new do |opts|
opts.on('-v')    { |version| options[:version] = version }
opts.on('-g')    { |branch| options[:branch] = branch }
opts.on('-f')    { |full| options[:full] = full }
opts.on('-h')    { RDoc::usage }
end.parse!

# mandatory options
if (options[:version] == nil)  or (options[:branch] == nil) or (options[:full]== nil) then
    puts options[:branch]
    puts options[:version]
    puts options[:full]
    RDoc::usage('usage')
end

puts options[:branch]

---> 是的

有什么想法吗?

【问题讨论】:

    标签: ruby arguments optparse


    【解决方案1】:

    如果你想获取一个值,你需要请求它:

    opts = OptionParser.new do |opts|
    opts.on('-v=s') { |version| options[:version] = version }
    opts.on('-g=s') { |branch| options[:branch] = branch }
    opts.on('-f=s') { |full| options[:full] = full }
    opts.on('-h') { RDoc::usage }
    

    =s 表示法表示存在关联值。

    在定义这样的接口时,不要忘记包含长格式名称,以便清晰起见,例如 --version--branch,这样人们就不必记住 g 的意思是“分支”。

    所有这些都包含在fantastic documentation 中,我鼓励您阅读。

    【讨论】:

    • 当然,术语“s”应该替换为有意义的东西,例如'-g' 的'分支'。请记住,将使用这些选项规范创建帮助文本。
    • 另外,顺便说一句,OpenStructs 非常适合存储这些选项。无需显式引用哈希键,也无需提前指定属性名称(Struct 是必需的。
    • @KeithBennett 很好。就像--version=version-v=s 好。如果您愿意,OpenStruct 可以让事情保持干净,但常规 Hash 并没有完全错误。
    • 非常棒的文档,+1 :)))))))
    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 2020-02-13
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2013-01-03
    相关资源
    最近更新 更多