2016-04-12 2 views
0

Я пишу программу, для которой требуются аргументы для запуска, одним из возможных аргументов является возможность использовать файл, передав программу -f <file>. Я не понимаю, где это происходит, я пытаюсь прочитать файл как ARGV[1], потому что это второй аргумент, данный программе.Чтение файла, переданного как аргумент при использовании optparse

Однако вызов ARGV[1] ничего не выводит, однако, если я добавил еще два аргумента поверх флага и имени файла, а затем вызывается ARGV[1], он выдает последний аргумент, указанный как 1? Так, например:

ruby testparse.rb -f test.txt 
#<= Nothing there 

Но если бы я сделал это:

ruby testparse.rb -f test.txt test ttest 
#<= ttest 

ARGV[1] Это ставит на месте ARGV[3]? Итак, мои вопросы:

  • Почему я не могу позвонить в файл как ARGV[1], передавая его через optparse?
  • Как я могу вызвать файл, который нужно прочитать при использовании optparse?

Источник:

require 'optparse' 

options = {} 
OptionParser.new do |opt| 
    opt.on('-f=FILE', '--file=FILE', 'File it') { |o| options[:file] = o } 
end.parse! 

if ARGV[1].nil? 
    puts "Nothing there" 
else 
    puts ARGV[1] 
end 

ответ

0

При вызове parse! разобрать параметры командной строки, OptionParser удаляет все, что она признает из ARGV, в результате чего любой он не признает за обрабатывать, как вы хотите.

В вашем случае, поскольку вы указали опцию -f для принятия одного параметра, эти две записи удаляются с ARGV. В вашем коде вы сохраняете опцию в options[:file], поэтому убедитесь, что вместо ARGV[1].

+0

Я понял, для меня лично кажется, что вы все равно сможете назвать это из «ARGV», хотя не думаете? – JasonBorne

Смежные вопросы