OptionParser返回bool而不是参数?

Cra*_*ion 19 ruby optparse

当我从OptionParser文档中运行此示例时:

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
Run Code Online (Sandbox Code Playgroud)

并输入:ruby test.rb -v 100,它返回:

{:verbose=>true}
["100"]
Run Code Online (Sandbox Code Playgroud)

不应该是冗长的100,不是布尔值?

我不知道这个,有没有人有任何建议?

mu *_*ort 50

您已指定该-v选项没有参数:

opts.on("-v", ...
Run Code Online (Sandbox Code Playgroud)

如果你想让它参与争论,你必须这样说:

opts.on("-v n", "--verbose=n", ...
#-----------^
Run Code Online (Sandbox Code Playgroud)

如果你想强制n成一个整数,那么:

opts.on('-v n', '--verbose=n', OptionParser::DecimalInteger, ...
Run Code Online (Sandbox Code Playgroud)

您希望开始阅读make_switch文档(例如它),然后对示例进行反向工程.

不要因为困惑而感到难过,OptionParser文档并不是最好的事情.