带感叹号的Ruby示例

时间:2016-09-21 11:42:54

标签: ruby command-line-arguments

我正在编写一个在ruby中有不同选项的脚本,我无法理解OptionParser如何帮助我。

特别是,文档中有一个示例:https://docs.ruby-lang.org/en/2.1.0/OptionParser.html

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

我可以理解“end.parse”行上的感叹号(但我之后想到了一个参数),但我发现以下2行令人困惑,p尚未声明,我可以不明白它是否是示例源的一部分。

我如何使用'-v'选项?我只是检查选项[:v]是nil还是true

最后,其他选项会发生什么? OptionParser只解析交换机吗?如果我在'-v'之后有其他参数怎么办?喜欢myscript -v duck ketchup banana

1 个答案:

答案 0 :(得分:3)

回答你的问题:

  

我能理解" end.parse"上的感叹号。 line(但之后我预计会有一个参数)

The documentation声明parse!采用可选的argv参数。如果未提供,则默认为default_argv,我想这是包含在命令行中传递给此脚本的参数的字符串。

  

还没有被宣布,我无法理解它是否是示例来源的一部分

pdefined in Kernel,所以它(几乎)总是在Ruby中可用。 p obj相当于puts obj.inspect

在此上下文中,p仅用于说明在解析参数后,options哈希包含您在OptionParser块中定义的所有标志/选项。

  

我如何使用' -v'选项?我只是检查选项[:v]是否为真?

是的,但那实际上是options[:verbose]

  

最后,其他选项会发生什么? OptionParser只解析交换机吗?如果我在' -v'之后有其他参数怎么办?喜欢myscript -v duck ketchup banana

您必须多次调用opts.on以匹配您感兴趣的所有其他开关/参数。请查看文档here以获取有关如何执行此操作的说明。