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