OptionParser返回bool而不是参数?

时间:2012-03-06 03:20:48

标签: ruby optparse

当我从OptionParser文档运行this sample时:

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,而不是布尔值吗?

我对此一无所知,有没有人有任何建议?

1 个答案:

答案 0 :(得分:50)

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

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

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

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

如果你想强制n为整数,那么:

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

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

感到困惑不要感到困惑,OptionParser文档并不是最好的事情。