【问题标题】:How does Ruby's OptionParser work?Ruby 的 OptionParser 是如何工作的?
【发布时间】:2014-12-01 22:28:07
【问题描述】:

来自http://ruby-doc.org/stdlib-2.1.5/libdoc/optparse/rdoc/OptionParser.html的OptionParser的“最小示例”:

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

主要问题:

  • opts 的内容到底是什么?它是新的 OptionParser 实例,还是传递给脚本的所有 /-\w//--\w+/ 的东西?作为推论,do 是否阻塞了循环?
  • parse! 有什么作用?为什么在整个 do 块上调用它?

也想知道:

  • OptionParser#banner 方法是什么?您会在什么情况下看到该文本?
  • 您会在什么情况下看到该示例中传递给 OptionParser 的第三个参数,即对标志效果的简短描述?
  • 如果脚本使用未知选项运行,如何创建自定义错误消息?

【问题讨论】:

  • 你的问题太宽泛了。在 Stack Overflow 上,一个问题应该是一个单个问题,或者偶尔是两个密切相关的问题,但除此之外,人们不赞成;你有九个。限制问题是为了避免混淆和稀释页面的有用性。您将在您引用的文档中找到您的 OptionParser 问题的答案。

标签: ruby optionparser


【解决方案1】:
  1. opts 只是OptionParser 的新实例。提供给.new 的块使用以下行运行:

    yield self if block_given?
    
  2. parse!parse 相同,但它具有破坏性,这意味着它将从ARGV 中删除使用过的开关。它在整个 do ... end 块上调用,因为返回的值是新的 OptionParser 实例。

  3. banner获取摘要的标题,可以用opts.banner = "foo"设置

  4. 显示帮助时显示说明(-h 标志):

    Usage: example.rb [options]
        -v, --[no-]verbose               Run verbosely
    
  5. 您可以挽救OptionParser::InvalidOption 异常:

    parser = OptionParser.new ...
    
    begin
      parser.parse!
    rescue OptionParser::InvalidOption
      puts 'Invalid args!'
    end           
    

【讨论】:

  • 感谢八月的回复!
  • 我仍然不清楚 parse 究竟做了什么——文档没有解释。
猜你喜欢
  • 2014-10-20
  • 2012-11-29
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
相关资源
最近更新 更多