在Ruby中,getoptlong破坏性地解析ARGV。有没有解决的办法?

时间:2008-12-01 03:58:00

标签: ruby getopt

我需要多次调用getoptlong,但在第一次ARGV为空之后。

1 个答案:

答案 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}"