我试图做一些看起来像这样的事情:
opt_parser = OptionParser.new do |opt|
opt.banner = "Test"
opt.separator ""
opt.on("-t", "--test arg1 arg2", "Test") do |arg1, arg2|
puts arg1
puts arg2
end
end
问题是它返回arg1
,但arg2
返回nil
。如何使这项工作?
答案 0 :(得分:5)
为指定选项指定值列表的可接受方式是重复该选项(例如-D
选项接受{{1>}选项3}}和C编译器),例如
my_script.rb --test=arg1 --test=arg2
在某些情况下,您的参数的性质可能会使您能够使用分隔符而不会引入歧义(例如-classpath
选项java
或,更清楚地说,java
的-o
选项,所以如果arg1
和arg2
通常永远不会包含逗号,
,那么您也可以接受例如< / p>
my_script.rb --test=arg1,arg2
支持上述两种约定的代码将是:
require 'optparse'
...
test_vals = []
...
opt_parser = OptionParser.new do |opt|
...
opt.on("-t", "--test=arg1[,...]", "Test") do |arg|
test_vals += arg.split(',')
end
...
end
opt_parser.parse!
puts test_vals.join("\n")
然后:
$ my_script.rb --test=arg1 --test=arg2
arg1
arg2
$ my_script.rb --test=arg1,arg2
arg1
arg2
$ my_script.rb --test=arg1 --test=arg2,arg3
arg1
arg2
arg3
答案 1 :(得分:3)
如果vladr的答案可以接受,则替代方法是将Array
作为第三个参数传递给#on
:
require 'optparse'
test_vals = []
opt_parser = OptionParser.new do |opt|
opt.banner = "Test"
opt.separator ""
opt.on("-t", "--test arg1[,...]", Array, "Test") do |args|
test_vals += args
end
end
opt_parser.parse!
puts test_vals.join("\n")