Em Ruby, getoptlong destrutiva analisa ARGV. Existe uma maneira de contornar isso?
Pergunta
Eu preciso invocar getoptlong várias vezes, mas depois da primeira vez ARGV está vazio.
Solução
Capture os argumentos antes da primeira chamada, colocá-los de volta quando você está feito. Parece que você está fazendo algo meio estranho, no entanto.
Editar : (expandido)
Há um monte de copiar e colar aqui. Eu considero que ajudar com clareza:
require 'getoptlong'
storage = ARGV.clone
opts = GetoptLong.new(
['--help', '-h', GetoptLong::NO_ARGUMENT ],
[ '--repeat', '-n', GetoptLong::REQUIRED_ARGUMENT ],
[ '--name', GetoptLong::OPTIONAL_ARGUMENT ]
)
puts "Before: #{ARGV.inspect}"
opts.each { |opt, arg| puts "Parsed #{opt} = #{arg}" }
puts "After: #{ARGV.inspect}"
# Copy
storage.each {|x| ARGV << x }
opts = GetoptLong.new(
['--help', '-h', GetoptLong::NO_ARGUMENT ],
[ '--repeat', '-n', GetoptLong::REQUIRED_ARGUMENT ],
[ '--name', GetoptLong::OPTIONAL_ARGUMENT ]
)
puts "Before 2: #{ARGV.inspect}"
opts.each { |opt, arg| puts "Parsed #{opt} = #{arg}" }
puts "After 2: #{ARGV.inspect}"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow