在Ruby中以编程方式创建数组名称

时间:2011-05-23 05:17:22

标签: ruby arrays

我是一名菜鸟程序员,我想知道如何使用另一个数组中的单词列表创建数组名称。

例如,我想采用这个数组:

array = ['fruits','veggies']

并把它变成这样的东西:

fruits = []
veggies = []

在Ruby中执行此操作的最佳方法是什么?

这是我的镜头,在那里我悲惨地失败了:

variables = ['awesome', 'fantastic', 'neato']

variables.each do |e|
  e = []
  e << [1, 2, 3]
end

puts neato

2 个答案:

答案 0 :(得分:9)

问题是你的数组可能包含一个与局部变量或方法的名称相匹配的值,并且当痛苦和混乱开始时就是这样。

可能最好建立一个数组哈希:

variables = ['awesome', 'fantastic', 'neato']
hash = variables.each_with_object({ }) { |k, h| h[k] = [ ] }

或者,如果您没有each_with_object

hash = variables.inject({ }) { |h, k| h[k] = [ ]; h }

注意带有inject的块中的参数顺序开关,并且必须从块中返回h

这样你就拥有了你的数组,但你也可以通过使用哈希作为小的可移植命名空间来保护你的命名空间。您可以像Jacob Relkin演示的那样动态创建变量,但这样做会让您遇到麻烦。如果variables的元素最终成为非字母数字,您也会遇到麻烦。

答案 1 :(得分:5)

arr = ['a', 'b', 'c']
arr.each do |a|
  self.instance_variable_set(('@' + a.to_s).intern, [1,2,3])
}

puts @a #[1,2,3]