Ruby 带有感叹号的示例

Ruby example with exclamation mark

我正在 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" 行上的感叹号(但我希望后面有一个参数),但我发现以下两行令人困惑, p 尚未声明,并且我不明白它是否是示例源代码的一部分。

以及如何使用“-v”选项?我只是检查 options[:v] 是 nil 还是 true

最后,其他选项会怎样? OptionParser 是否只解析开关?如果我在“-v”之后有其他参数怎么办?喜欢 myscript -v duck ketchup banana?

回答您的问题:

I can understand the exclamation mark on the "end.parse" line (but I expected a parameter after that)

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

p hasn't been declared, and I can't understand if it's part of the example source

pdefined in Kernel,因此它(几乎)总是在 Ruby 中可用。 p obj 等同于 puts obj.inspect.

在此上下文中,p只是用来说明在解析参数后,options散列包含您在OptionParser块中定义的所有flags/options。

And how do I use the '-v' option? Do I simply check if options[:v] is nil or true?

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

Last thing, what happens to the other options? Does the OptionParser only parse switches? What if I had other parameters after the '-v'? Like myscript -v duck ketchup banana?

您必须多次调用 opts.on 才能匹配您感兴趣的所有其他 switches/arguments。请查看文档 here 以了解如何执行此操作的说明。