我正在编写一个在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
?
答案 0 :(得分:3)
回答你的问题:
我能理解" end.parse"上的感叹号。 line(但之后我预计会有一个参数)
The documentation声明parse!
采用可选的argv
参数。如果未提供,则默认为default_argv
,我想这是包含在命令行中传递给此脚本的参数的字符串。
还没有被宣布,我无法理解它是否是示例来源的一部分
p
是defined 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以获取有关如何执行此操作的说明。