如何在变量值后创建数组名称

时间:2012-12-29 13:49:57

标签: ruby variables

我正在尝试在某些线程中创建一些数组,并在1到30之间的fixnum之后命名它们,如下所示:

times = 30
n=0
thread = []
while n < times
  thread << Thread.new(n)  {|x|
    array#{x} = Array.new()
    ... 
  }
end

我该怎么做?

2 个答案:

答案 0 :(得分:2)

Ruby不允许您以与PHP相同的方式从字符串创建变量名。在这种情况下,您可以使用数组或散列。

times = 30
n=0

arrays = []
thread = []

while n < times

  thread << Thread.new(n)  {|x|

    arrays[x] = Array.new()
    ... 
  }
end

您还可以使用更多rubyish构造而不是while,例如Fixnum#times

arrays = []
threads = 30.times.map do |n|
  Thread.new do
    arrays[x] = Array.new
    # ...
  end
end

> arrays
#=> [[], [], [], ....]
> threads
#=> [#<Thread:0x007fe3f22a2320 dead>, #<Thread:0x007fe3f22a2208 dead>, ...]

答案 1 :(得分:0)

如果你不介意使用实例变量而不是局部变量,你可以做你想做的事情(以这种方式设计代码是一个好主意是另一个问题)。

1.upto(times) do |i|
  instance_variable_set("@array#{i}".to_sym, [])
end