スレッドの外部で定義されたローカル変数は内部から見えるように見えるため、次の 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
、は作成されたスレッドの内部から見えるためb
、c
これも次と同じである必要があります。
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
いつですか?