OptionParser返回布尔值而不是参数?

20

当我运行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"]

verbose应该不是一个布尔值,而是应该是100才对吧?

我对此一无所知,有人能给点建议吗?


当我运行提供的链接中的最小部分时,它也会产生{:verbose=>true} - ScottJShea
2
--[no]verbose指定了verbose是一个布尔开关。 - the Tin Man
1个回答

52
您已经指定-v选项没有参数:
opts.on("-v", ...

如果你希望它接受一个参数,那么你必须明确表达出来:

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

如果你想强制将n转换为整数,可以使用以下方法:

opts.on('-v n', '--verbose=n', OptionParser::DecimalInteger, ...
你想要开始阅读make_switch文档(虽然它不怎么好),然后逆向工程示例。
不要为自己的困惑感到难过,OptionParser文档并不是最好的东西。

我明白了...我修改了我的程序,现在它可以正常工作了。非常感谢!我会去阅读make_switch文档的。谢谢! - CrazyLion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接