来自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

主要问题:
那里的内容到底是什么?是新的optionparser实例,还是所有传递给脚本的看起来像opts/-\w/的东西?作为推论,这是否会阻塞循环?
/--\w+/做什么?为什么在整个do块上调用它?
还想知道:
什么是parse!方法?你会在什么情况下看到那篇文章?
在该示例中,您将在什么上下文中看到传递给optionparser的第三个参数,即对标志效果的一点描述?
如果脚本使用未知选项运行,如何创建自定义错误消息?

最佳答案

opts只是OptionParser的新实例。提供给.new的块使用以下行运行:

yield self if block_given?

parse!parse是相同的,但它具有破坏性,这意味着它将从ARGV中删除已使用的开关它在整个do ... end块上调用,因为返回的值是新的OptionParser实例。
banner获取摘要的标题,可使用opts.banner = "foo"设置
显示帮助时显示说明(-h标志):
Usage: example.rb [options]
    -v, --[no-]verbose               Run verbosely

您可以挽救OptionParser::InvalidOption异常:
parser = OptionParser.new ...

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

08-26 10:33