variabili locali definite al di fuori di un thread sembrano essere visibile dall'interno in modo che i seguenti due utilizzi di Thread.new
sembrano essere la stessa:Quando è necessario passare argomenti a `Thread.new`?
a = :foo
Thread.new{puts a} # => :foo
Thread.new(a){|a| puts a} # => :foo
Il document dà l'esempio:
arr = []
a, b, c = 1, 2, 3
Thread.new(a,b,c){|d, e, f| arr << d << e << f}.join
arr #=> [1, 2, 3]
ma dal a
, b
, c
sono visibili dall'interno del thread creato, questo dovrebbe essere lo stesso di:
arr = []
a, b, c = 1, 2, 3
Thread.new{d, e, f = a, b, c; arr << d << e << f}.join
arr #=> [1, 2, 3]
C'è qualche differenza? Quando è necessario passare variabili locali come argomenti a Thread.new
?
Buona risposta. Al punto. – sawa
Se stiamo sovrascrivendo il valore di 'd' all'interno del thread, allora qual è il caso d'uso per passarlo come argomento? E se stiamo eseguendo qualsiasi operazione su 'd', allora sta riflettendo nel valore di' a'. '' ' a =" foo " Thread.new {a =" nuovo "} p a Thread.new (a) do | d | d.prepend ("vecchio") puts d # => "oldnew" mette un # => "oldnew" fine '' ' – Kuldeep