Подтвердить что ты не робот

OptionParser возвращает bool вместо аргумента?

Когда я запустил этот пример из документации 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 не булевым?

Я понятия не имею об этом, есть ли у кого-нибудь какие-либо советы?

4b9b3361

Ответ 1

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

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

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

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

И если вы хотите заставить n быть целым числом, то:

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

Вы хотите начать чтение в make_switch docs (например, он есть), а затем перепроектировать примеры.

Не чувствуйте себя плохо, когда вас путают, документация OptionParser не самая лучшая вещь.