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"]

不应该是详细100的,而不是布尔值吗?

我对此一无所知,有人有什么建议吗?

4

1 回答 1

52

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

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

如果你想让它接受一个论点,那么你必须这样说:

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

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

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

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

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

于 2012-03-06T03:52:27.903 回答