Локальные переменные, определенные вне потока, кажутся видимыми изнутри, так что следующие два использования 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
?