【问题标题】:Ruby OptionParser: how to handle arguments without a prefix (like a required filename)Ruby OptionParser:如何处理没有前缀的参数(如所需的文件名)
【发布时间】:2015-08-14 14:44:40
【问题描述】:

我是第一次与OptionParser 合作。

我想知道的是,如何使 OptionParser 处理没有以某个标志名为前缀的参数。我希望能够写出这样的语句:

myscript.rb -d someoption -b someotheroption filename

filename 是我要处理的文件的名称。它没有任何选项标志的前缀。如何使用 OptionParser 解析上述命令,并获得对 filename 的引用?

【问题讨论】:

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


    【解决方案1】:

    OptionParser 专门处理选项——即以破折号开头的东西。在它解析之后,剩余的参数留在ARGV 中。您可以在那里检查您的文件名,如果丢失则退出并显示错误。

    对他们的minimal example稍作修改,

    require 'optparse'
    
    options = {}
    OptionParser.new do |opts|
      opts.banner = "Usage: example.rb [options]"
    
      opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
        options[:verbose] = v
      end
    end.parse!
    
    p options
    p ARGV
    p "Where is my hat?!" if ARGV.length == 0
    

    你明白了:

    $ ruby parse.rb
    {}
    []
    "Where is my hat?!"
    
    $ ruby parse.rb hat
    {}
    ["hat"]
    
    $ ruby parse.rb -v hat
    {:verbose=>true}
    ["hat"]
    

    【讨论】:

    • 谢谢!这正是我想要的。效果很好。
    猜你喜欢
    • 2011-02-02
    • 2010-12-05
    • 2013-05-18
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2012-11-20
    相关资源
    最近更新 更多