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

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 に答える