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