saw*_*awa 17 ruby multithreading local-variables
在线程外部定义的局部变量似乎从内部可见,因此以下两种用法Thread.new看起来是相同的:
a = :foo
Thread.new{puts a} # => :foo
Thread.new(a){|a| puts a} # => :foo
Run Code Online (Sandbox Code Playgroud)
该文件给出了一个例子:
arr = []
a, b, c = 1, 2, 3
Thread.new(a,b,c){|d, e, f| arr << d << e << f}.join
arr #=> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
但由于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]
Run Code Online (Sandbox Code Playgroud)
有什么区别吗?什么时候需要将局部变量作为参数传递给Thread.new?
con*_*t47 22
当您将变量传递给类似的线程时,该线程会生成变量的本地副本并使用它,因此对它的修改不会影响您传入的线程之外的变量
a = "foo"
Thread.new{ a = "new"}
p a # => "new"
Thread.new(a){|d| d = "old"}
p a # => "new"
p d # => undefined
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5243 次 |
| 最近记录: |