如何迭代Ruby GetoptLong对象两次?

时间:2014-04-28 14:37:55

标签: ruby command-line-arguments

请查看这个名为foo.rb的简单代码:

require( 'getoptlong' )
opts = GetoptLong.new(  [ '--ies', GetoptLong::OPTIONAL_ARGUMENT ] )
opts.each do | opt, arg |
  if( opt == '--ies' )
    puts arg
  end
end
opts.each do | opt, arg |
  if( opt == '--ies' )
    puts arg
  end
end

我希望如果我在LINUX中输入:

foo.rb --ies=bar

我会得到:

bar
bar

但是,我只得到一行:

bar

为什么我不能通过GetoptLong实例迭代两次? 谢谢,

1 个答案:

答案 0 :(得分:0)

实施不允许。 GetoptLong#each在循环中调用GetoptLong#get_option,直到它返回nil,即“处理完成”。完成后,它始终返回nil,因此无法再次处理。

你可以创建一个数组:

opts_array = []
opts.each { |o, a| opts_array << [o, a] }

opts_array.each do |opt, arg|
  # ...
end
opts_array.each do |opt, arg|
  # ...
end