2008-12-01 27 views

回答

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}" 
+0

不太合適。我在類構造函數中調用getoptlong。我在一個文件中多次對這個類(ruby的TestUnit框架)進行子類化。 在方法中重新定義ARGV會在Ruby中生成錯誤 – 2008-12-01 04:09:40

相關問題