使用OptionParser进行字符串参数输入和哈希分配.读取单个参数的多个变量的最佳方法是什么?我如何将这些分配给哈希引用?这是我到目前为止:
large_skus = Hash.new small_skus = Hash.new OptionParser.new do |opts| opts.on("-b","--brands bName1,bName2,bNameN",String,"Check specific brands by name") do |b| options[:brands] = b.split(",") end opts.on("-l","--large lSku1,lSku2,lSkuN","Large SKUs - List CSVs") do |l| options[:large_skus] = l.split(",") ##For each sku given brandName = options[:brands] large_skus[brandName] = l[$sku].to_i ## end opts.on("-s","--small sSku1,sSku2,sSkuN","Small SKUs - List CSVs") do |s| options[:small_skus] = s.split(",") ##For each sku given brandName = options[:brands] small_skus[brandName] = s[$sku].to_i ## end end.parse!(ARGV)
解决方法
给出一个输入:
ruby test.rb --brands bName1,bNameN --large lSku1,lSkuN --small wQueue1,wQueue2,wQueueN
这段代码
#!/usr/bin/env ruby require 'ap' require 'optparse' options = {} OptionParser.new do |opts| opts.on("-b",Array,"Check specific brands by name") do |b| options[:brands] = b end opts.on("-l","Large SKUs - List CSVs") do |l| options[:large_skus] = l end opts.on("-s","--small wQueue1,wQueueN","Small SKUs - List CSVs") do |s| options[:small_skus] = s end end.parse!(ARGV) ap options
{ :brands => [ [0] "bName1",[1] "bName2",[2] "bNameN" ],:large_skus => [ [0] "lSku1",[1] "lSku2",[2] "lSkuN" ],:small_skus => [ [0] "wQueue1",[1] "wQueue2",[2] "wQueueN" ] }
请注意,我没有使用每个选项的String类型,而是使用Array.这让OptionParser可以将元素解析成数组.从那时起,由你决定使用数组元素.