Почему Ruby OptionParser не читает все мои аргументы?
Это мой код:
#!/usr/bin/env ruby
# OptionParser
require 'optparse'
options = {}
optparse = OptionParser.new do|opts|
opts.banner = '...'
# This option inputs ...
options[:Lap1] = []
opts.on('-1', '--Lap1 filepath1,width1,height1,a1,first1,last1', String, '...') do|l1|
options[:Lap1] = l1.split(',')
end
end
optparse.parse!
Моя цель - получить массив отдельных входов, разделенных запятыми. Однако этот код выводит только первую переменную $filepath1
,
Выход из:
puts(options[:Lap1])
а также
puts(options[:Lap1][0]
это просто первая переменная filepath1
,
puts(options[:Lap1][1])
является nil
когда это должна быть переменная width1
,
Любые предложения или возможные исправления будут полезны, спасибо.
2 ответа
Вам нужно позвонить в разбор! метод для вашего объекта OptionParser после объявления всех параметров.
optparse.parse!
Я написал бы этот код немного по-другому:
require 'optparse'
require 'pp'
options = {
:Lap1 => []
}
optparse = OptionParser.new do |opts|
opts.banner = '...'
# This option inputs ...
opts.on(
'-1', '--Lap1 filepath1,width1,height1,a1,first1,last1',
Array,
'...'
) { |l1| options[:Lap1] = l1 }
end.parse!
pp options
Выполнение этого в командной строке:
ruby test.rb -1 filepath1,width1,height1,a1,first1,last1
Результаты в:
{:Lap1=>["filepath1", "width1", "height1", "a1", "first1", "last1"]}
Тестирование с использованием --Lap1
результаты в:
ruby test.rb --Lap1 filepath1,width1,height1,a1,first1,last1
А также:
{:Lap1=>["filepath1", "width1", "height1", "a1", "first1", "last1"]}
На мой взгляд, вы должны установить свои значения по умолчанию, когда вы определяете options
хэш.
options = {
:Lap1 => []
}
Также обратите внимание на использование Array
вместо String
, OptionParser автоматически разделит запятую строку на массив отдельных элементов, если вы используете Array
спасая тебя split
шаг, и избегая немного запутанного кода. Смотрите документацию для OptionParser's make_switch
метод для получения дополнительной информации.