来自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
方法是什么?你会在什么情况下看到那个文字?答案 0 :(得分:1)
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