我想迭代一些数组,并希望从一组名称中动态命名它们。像这样的东西,用name
...
names array
names=[a, b, c]
names.each{|name|
name_array1=[]
name_array2=[]
name_array[0][0].each{|i|
if i>0
name_array1.push([i])
end
if i<0
name_array2.push([i])
end
}
}
基本上创建数组a_array1
,a_array2
,a_array[0][0]
,b_array1
,b_array2
,b_array[0][0]
,c_array1
,{ {1}},c_array2
这甚至可能吗?
答案 0 :(得分:6)
Ruby不支持动态本地变量名 1 。
但是,这可以使用Hash轻松表示。哈希将键映射到值,在这种情况下,键表示“名称”,值是数组:
# use Symbols for names, although Strings would work too
names = [:a, :b, :c]
# create a new hash
my_arrays = {}
# add some arrays to our hash
names.each_with_index { |name, index|
array = [index] * (index + 1)
my_arrays[name] = array
}
# see what we have
puts my_arrays
# access "by name"
puts my_arrays[:b]
(有很多方法可以在没有副作用的情况下编写上述内容,但这应该是一个开始。)
1 动态实例/类变量名称是一个不同的故事,但最好现在作为“高级主题”保留,并且不适用到当前任务。在过去(Ruby 1.8.x)中,eval
可用于更改局部变量绑定,但在新版本中,这绝不是“好”方法和does not work。