0

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

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

我怎样才能做到这一点?

4

2 回答 2

2

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

times = 30
n=0

arrays = []
thread = []

while n < times

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

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

您还可以使用更多的 ruby​​ish 构造来代替 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>, ...]
于 2012-12-29T14:49:34.730 回答
0

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

1.upto(times) do |i|
  instance_variable_set("@array#{i}".to_sym, [])
end
于 2012-12-29T19:50:01.580 回答