选项在OptParse中有2个参数

Nat*_*pos 2 ruby optparse command-line-arguments

我正在尝试做一些看起来像这样的事情:

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
Run Code Online (Sandbox Code Playgroud)

问题是它返回arg1,但arg2返回nil.如何使这项工作?

vla*_*adr 5

指定给定选项的值列表的可接受方式是重复该选项(例如,-DjavaC编译器接受的选项),例如

my_script.rb --test=arg1 --test=arg2
Run Code Online (Sandbox Code Playgroud)

在某些情况下,您的参数的性质可能是这样的,您可以负担得起使用分隔符而不会引入歧义(例如-classpath选项java或更明显的-o选项ps),所以如果arg1并且arg2通常永远不会包含逗号,那么你也可以接受,例如

my_script.rb --test=arg1,arg2
Run Code Online (Sandbox Code Playgroud)

支持上述两种约定的代码将类似于:

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")
Run Code Online (Sandbox Code Playgroud)

然后:

$ 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
Run Code Online (Sandbox Code Playgroud)