Ruby 通过命令行传递数组

Ruby 通过命令行传递数组,ruby,Ruby,我有一个Ruby脚本,名为foobar.rb,它接受多个参数 我希望(可选)能够在命令行上指定整数数组,并能够将它们作为单个选项进行处理。我想我的命令行应该是这样的: foobar.rb [1,2,3] require 'optparse' options = {} OptionParser.new do |opts| opts.banner = "Usage: #{$0} [options]" opts.on("-a", "--argument a,b,c", Array, "

我有一个Ruby脚本,名为
foobar.rb
,它接受多个参数

我希望(可选)能够在命令行上指定整数数组,并能够将它们作为单个选项进行处理。我想我的命令行应该是这样的:

foobar.rb [1,2,3]
require 'optparse'

options = {}

OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} [options]"

  opts.on("-a", "--argument a,b,c", Array, "Array of arguments") { |a| options[:array] = a.map { |v| v.to_i } }
end.parse!

puts options.inspect

  => {:array=>["1", "2", "3", "4"]}
在1-10分的范围内,我对Ruby的了解大概在6分左右。只需知道可能有一种简单的方法来实现这一点,但还不足以知道它是什么,甚至不足以知道在文档中可以查看到哪里


如何解析这个以逗号分隔的整数列表,并在代码中生成一个
数组
?如果存在这样的解决方案,我更喜欢不需要添加任何外部库的idomatic单行解决方案。

如果您使用bash作为终端,这应该可以:

integer_array = ARGV[0].scan(/\d/).map(&:to_i) # => Array containing 1,2,3
用zsh尝试了一下,结果崩溃了,因为zsh试图在命令行上解释
[]

对于zsh,您必须使用

foobar.rb "[1,2,3]"

我会自己使用
optpass
,如下所示:

foobar.rb [1,2,3]
require 'optparse'

options = {}

OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} [options]"

  opts.on("-a", "--argument a,b,c", Array, "Array of arguments") { |a| options[:array] = a.map { |v| v.to_i } }
end.parse!

puts options.inspect

  => {:array=>["1", "2", "3", "4"]}

没有足够的信息,你已经尝试了什么?代码是什么样子的?我实际上使用的是Windows,但我会尝试使用它。在Windows下的IRB中,它实际上返回一个字符串数组,而不是int,但这可能足够接近了。是
optparse
“部分”Ruby,还是我必须下载/安装的东西?是标准库的一部分。内置。建议+1:Thx。我想我会同意@Anthony Alberto的建议,但我的工具箱里有这个很好
ruby_knowledge+=0.1
如果您确实计划传递多个参数,这种方法会更加健壮,但是如果您只计划传递一个数组,his应该可以正常工作。在阅读文档并使用
OptPass
之后,我实际上选择了这个解决方案。事实证明,即使是满足我的简单需求,它也会好得多。尽管如此,我还是从这两个回复中学到了很多——谢谢。