在线程外部定义的局部变量似乎从内部可见,因此以下两种用法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
?