我需要多次调用getoptlong,但在第一次ARGV为空之后。
答案 0 :(得分:4)
在第一次通话之前捕获args,在完成后将它们放回原处。听起来你在做某种奇怪的事情。
修改 :(已展开)
这里有很多复制和粘贴。我认为这有助于明确:
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}"