zmienne lokalne zdefiniowane poza wątku wydają się być widoczne od wewnątrz tak, że dwa kolejne zastosowania Thread.new
wydają się być takie same:Kiedy trzeba przekazać argumenty do `Thread.new`?
a = :foo
Thread.new{puts a} # => :foo
Thread.new(a){|a| puts a} # => :foo
document 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]
ale od a
, b
, są widoczne od wewnątrz utworzonego wątku, to powinno być również 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 są jakieś różnice? Kiedy należy przekazywać zmienne lokalne jako argumenty do Thread.new
?
Dobra odpowiedź. Do momentu. – sawa
Jeśli mamy wartość nadpisującą 'd' wewnątrz wątku, to jaki jest przypadek użycia, aby przekazać go jako argument? A jeśli wykonujemy jakąkolwiek operację na 'd', to odzwierciedla ona wartość' a'. '' ' a =" foo " Thread.new {a =" new "} p a Thread.new (a) do | d | d.prepend ("old") stawia d # => "oldnew" stawia # => "oldnew" koniec '' ' – Kuldeep