OptionParser returning bool instead of argument?

2019-04-18 04:09发布

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?

标签: ruby optparse
1条回答
啃猪蹄的小仙女
2楼-- · 2019-04-18 04:30

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.

查看更多
登录 后发表回答