Kiedy musisz przekazać argumenty do `Thread.new`?
Zmienne lokalne zdefiniowane poza wątkiem wydają się być widoczne od wewnątrz, tak że następujące dwa zastosowaniaThread.new
wydają się być takie same:
a = :foo
Thread.new{puts a} # => :foo
Thread.new(a){|a| puts a} # => :foo
Thedokument podaje przykład:
arr = []
a, b, c = 1, 2, 3
Thread.new(a,b,c){|d, e, f| arr << d << e << f}.join
arr #=> [1, 2, 3]
lecz odkąda
, b
, c
są widoczne z wewnątrz utworzonego wątku, powinno to być takie samo jak:
arr = []
a, b, c = 1, 2, 3
Thread.new{d, e, f = a, b, c; arr << d << e << f}.join
arr #=> [1, 2, 3]
Czy jest jakaś różnica? Kiedy musisz przekazać zmienne lokalne jako argumenty doThread.new
?