17

スレッドの外部で定義されたローカル変数は内部から見えるように見えるため、次の 2 つの使用法はThread.new同じように見えます。

a = :foo
Thread.new{puts a} # => :foo
Thread.new(a){|a| puts a} # => :foo

ドキュメントは例を示しています:

arr = []
a, b, c = 1, 2, 3
Thread.new(a,b,c){|d, e, f| arr << d << e << f}.join
arr #=> [1, 2, 3]

a、は作成されたスレッドの内部から見えるためbcこれも次と同じである必要があります。

arr = []
a, b, c = 1, 2, 3
Thread.new{d, e, f = a, b, c; arr << d << e << f}.join
arr #=> [1, 2, 3]

違いはありますか?にローカル変数を引数として渡す必要があるのはThread.newいつですか?

4

2 に答える 2