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?

The Unfun Cat
  • 29,987
  • 31
  • 114
  • 156
CrazyLion
  • 225
  • 2
  • 5

1 Answers1

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.

mu is too short
  • 426,620
  • 70
  • 833
  • 800
  • i got it.... i chane my program. and it works. Thanks a lot . i will go to read the make_switch docs. Thanks ! – CrazyLion Mar 06 '12 at 04:17