Локальные переменные, определенные вне нити, кажется, виден изнутри так, что следующие два варианта использования Thread.new
, кажется, то же самое:Когда вам нужно передать аргументы в `Thread.new`?
a = :foo
Thread.new{puts a} # => :foo
Thread.new(a){|a| puts a} # => :foo
document приводит пример:
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
?
Хороший ответ. К точке. – sawa
Если мы являемся первостепенным значением 'd' внутри потока, тогда каков прецедент, чтобы передать его в качестве аргумента? И если мы выполняем какую-либо операцию на 'd', тогда она отражается в значении' a'. '' ' a =" foo " Thread.new {a =" new "} p a Thread.new (a) do | d | d.prepend ("old") puts d # => "oldnew" ставит # => "oldnew" конец '' ' – Kuldeep