2

来自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 的第三个参数,即对标志效果的简短描述?
  • 如果脚本使用未知选项运行,如何创建自定义错误消息?
4

1 回答 1

2
  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           
    
于 2014-12-01T22:58:46.020 回答