When I run this sample from the OptionParser documentation:
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
and type: ruby test.rb -v 100
, it returns:
{:verbose=>true}
["100"]
Shouldn't verbose be 100
, not a boolean?
I have no idea about this, does anyone have any advice?
You've specified that the -v
option does not have an argument:
opts.on("-v", ...
If you want it to take an argument then you have to say so:
opts.on("-v n", "--verbose=n", ...
#-----------^
And if you want to force n
to be an integer, then:
opts.on('-v n', '--verbose=n', OptionParser::DecimalInteger, ...
You want to start reading at the make_switch
docs (such as it is) and then reverse engineer the examples.
Don't feel bad about being confused, the OptionParser documentation isn't quite the best thing ever.
来源:https://stackoverflow.com/questions/9577478/optionparser-returning-bool-instead-of-argument