OptionParser returning bool instead of argument?
Asked Answered
D

1

20

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?

Dalenedalenna answered 6/3, 2012 at 3:20 Comment(2)
When I ran the minimal section from the link provided it produced {:verbose=>true} as wellCocky
--[no]verbose specifies that verbose is a boolean switch.Fumed
P
52

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.

Pearlene answered 6/3, 2012 at 3:52 Comment(1)
i got it.... i chane my program. and it works. Thanks a lot . i will go to read the make_switch docs. Thanks !Dalenedalenna

© 2022 - 2024 — McMap. All rights reserved.