我正在尝试在某些线程中创建一些数组,并在1到30之间的fixnum之后命名它们,如下所示:
times = 30
n=0
thread = []
while n < times
thread << Thread.new(n) {|x|
array#{x} = Array.new()
...
}
end
我该怎么做?
答案 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