Ruby的OptionParser如何工作?

时间:2014-12-01 22:28:08

标签: ruby optionparser

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

1 个答案:

答案 0 :(得分:1)

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

    yield self if block_given?
    
  2. parse!parse相同,但它是破坏性,这意味着它将从ARGV中移除已使用的切换。它在整个do ... end块上调用,因为返回的值是新的OptionParser实例。

  3. banner获取摘要的标题,可以使用opts.banner = "foo"

  4. 进行设置
  5. 显示帮助时显示说明(-h标志):

    Usage: example.rb [options]
        -v, --[no-]verbose               Run verbosely
    
  6. 您可以拯救OptionParser::InvalidOption例外:

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