来自 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
block 中调用它?
还想知道:
OptionParser#banner
方法是什么?您会在什么情况下看到该文本?- 在那个例子中,您会在什么情况下看到传递给 OptionParser 的第三个参数,即对标志效果的简短描述?
- 如果脚本以未知选项运行,您如何创建自定义错误消息?
最佳答案
opts
只是OptionParser
的新实例。提供给.new
的 block 使用以下行运行:yield self if block_given?
parse!
与parse
相同,但它是破坏性的,这意味着它将从中删除使用过的开关>ARGV
。它在整个do ... end
block 上被调用,因为返回的值是新的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
关于ruby - Ruby 的 OptionParser 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27238536/