Почему 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 метод для получения дополнительной информации.

Другие вопросы по тегам