2

私は次のようなことをしようとしています:

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。これを機能させる方法は?

4

2 に答える 2

5

特定のオプションの値のリストを指定するための受け入れられた方法は、そのオプション(たとえば、Cコンパイラーによって受け入れられたオプション)を繰り返すことです。-Djava

my_script.rb --test=arg1 --test=arg2

場合によっては、引数の性質上、あいまいさを導入せずに区切り文字を使用できる場合があります(たとえば、-classpathへのオプションjava、より明確には、-oへのオプションps)。したがって、通常はコンマを含めることができない場合はarg1、例を受け入れることもできますarg2,

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
于 2012-11-05T01:34:06.280 に答える
3

vladr の答えが受け入れられる場合、別の方法は にArray3 番目の引数として渡すこと#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")
于 2013-12-07T18:23:26.170 に答える