私はいくつかのスレッドでいくつかの配列を作成し、次のように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
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