Ruby:OptionParser:字符串参数和哈希分配

标签 ruby variables split variable-assignment optionparser

使用 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", String, "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", String, "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,bName2,bNameN --large lSku1,lSku2,lSkuN --small wQueue1,wQueue2,wQueueN

这段代码

#!/usr/bin/env ruby

require 'ap'
require 'optparse'

options = {}
OptionParser.new do |opts|

  opts.on("-b", "--brands bName1,bName2,bNameN", Array, "Check specific brands by name") do |b|
    options[:brands] = b
  end

  opts.on("-l", "--large lSku1,lSku2,lSkuN", Array, "Large SKUs - List CSVs") do |l|
    options[:large_skus] = l
  end

  opts.on("-s", "--small wQueue1,wQueue2,wQueueN", Array, "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"
    ]
}

请注意,我没有为每个选项使用字符串类型,而是使用数组。这让 OptionParser 可以完成将元素解析为数组的繁重工作。从那时起,您可以自行决定如何处理数组元素。

关于Ruby:OptionParser:字符串参数和哈希分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3846683/

相关文章:

php - 如何将 php 变量插入 Wordpress 短代码?

javascript - JSLint 未使用变量错误

linux - bash 按 yyyy-mm-dd 在 N 天内 bash 中 2 个日期之间的差异

javascript - 如何使用 JavaScript 解析数据中包含逗号的 CSV 字符串?

java - 如果用户输入是一个句子,如何存储它?或者如果这是某人的名字?

ruby - 如何复制 ruby 变量?

Ruby:定义实例变量的更短方式

mysql - 从 Controller 在数据库中添加列

android - 从字符串android中拆分日期时间

ruby-on-rails - 具有单表继承的 Rails ActiveRecord_Associations_CollectionProxy