OptionParser возвращает bool вместо аргумента? - PullRequest
19 голосов
/ 06 марта 2012

Когда я запускаю этот образец из документации OptionParser:

require 'optparse'
options = {}
OptionParser.new do |opts|
    opts.banner = "Usage: example.rb [options]"
    opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
        options[:verbose] = v
    end
end.parse!
p options
p ARGV

и введите: ruby test.rb -v 100, возвращается:

{:verbose=>true}
["100"]

Не должно ли быть многословным 100, а не логическое значение?

Понятия не имею, есть у кого-нибудь совет?

1 Ответ

50 голосов
/ 06 марта 2012

Вы указали, что опция -v не имеет аргумента:

opts.on("-v", ...

Если вы хотите принять аргумент, вы должны сказать так:

opts.on("-v n", "--verbose=n", ...
#-----------^

А если вы хотите, чтобы n было целым числом, тогда:

opts.on('-v n', '--verbose=n', OptionParser::DecimalInteger, ...

Вы хотите начать чтение с документов make_switch (как оно есть), а затем выполнить обратный инжиниринг примеров.

Не расстраивайтесь из-за путаницы, документация OptionParser - не самая лучшая вещь.

...