OptionParser returning bool instead of argument?

孤人 提交于 2019-12-06 17:02:49

问题


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?


回答1:


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!