在Ruby中,getoptlong以破坏性方式解析ARGV。有办法解决这个问题吗?

在Ruby中,getoptlong以破坏性方式解析ARGV。有办法解决这个问题吗?,ruby,getopt,Ruby,Getopt,我需要多次调用getoptlong,但在第一次ARGV为空之后。在第一次调用之前捕获arg,完成后将其放回。听起来你在做一些奇怪的事情 编辑:(展开) 这里有很多复制和粘贴的内容。我认为有助于澄清: require 'getoptlong' storage = ARGV.clone opts = GetoptLong.new( ['--help', '-h', GetoptLong::NO_ARGUMENT ], [ '--repeat', '-n', GetoptLong::REQ

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

在第一次调用之前捕获arg,完成后将其放回。听起来你在做一些奇怪的事情

编辑:(展开)

这里有很多复制和粘贴的内容。我认为有助于澄清:

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}"
需要“getoptlong”
存储=ARGV.clone
opts=GetoptLong.new(
['--help','-h',GetoptLong::NO_参数],
['--repeat','-n',GetoptLong::REQUIRED_参数],
['--name',GetoptLong::可选的_参数]
)
将“置于:#{ARGV.inspect}之前”
opts.each{opt,arg}放置“已解析的{opt}={arg}”
将“置于:#{ARGV.inspect}之后”
#抄袭

storage.each{| x | ARGV不太有效。我正在类构造函数中调用getoptlong。我正在对这个类进行子类化(ruby的TestUnit框架)在一个文件中多次。从一个方法中重新定义ARGV会在RubyYou中生成一个错误。您不需要重新定义它。我将展开。太好了。我希望您的实际代码比我在这里得到的重用多一点。:)