3

getoptlong を複数回呼び出す必要がありますが、1 回目以降は ARGV が空になります。

4

1 に答える 1

4

最初の呼び出しの前に引数をキャプチャし、完了したら元に戻します。とはいえ、何か変なことをしているように聞こえます。

編集:(展開)

ここはコピペが多いです。明確にするのに役立つと思います:

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}"
于 2008-12-01T04:00:24.013 に答える