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

Mel*_*bel 4 ruby arrays

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

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

array = ['fruits','veggies']
Run Code Online (Sandbox Code Playgroud)

把它变成这样的东西:

fruits = []
veggies = []
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

puts neato
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 9

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

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

variables = ['awesome', 'fantastic', 'neato']
hash = variables.each_with_object({ }) { |k, h| h[k] = [ ] }
Run Code Online (Sandbox Code Playgroud)

或者,如果您没有each_with_object:

hash = variables.inject({ }) { |h, k| h[k] = [ ]; h }
Run Code Online (Sandbox Code Playgroud)

请注意块中的参数顺序开关inject,您必须h从块返回.

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


Jac*_*kin 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]
Run Code Online (Sandbox Code Playgroud)