OptionParser返回bool而不是参数?

当我从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 

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

 {:verbose=>true} ["100"] 

不应该是100 ,而不是布尔值?

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

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

 opts.on("-v", ... 

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

 opts.on("-vn", "--verbose=n", ... #-----------^ 

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

 opts.on('-v n', '--verbose=n', OptionParser::DecimalInteger, ... 

您想要开始阅读make_switch文档(例如它),然后对这些示例进行反向工程。

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