此代码:
Fiber.new do
Thread.current['a'] = 5
p Thread.current.object_id
p Thread.current['a']
Fiber.new do
p Thread.current.object_id
p Thread.current['a']
end.resume
p Thread.current.object_id
p Thread.current['a']
end.resume
显示以下结果:
3442840
5
3442840
nil
3442840
5
为什么current['a']
会在嵌套光纤中返回nil
?怎么解释?
答案 0 :(得分:1)
Thread#[]
和Thread#[]=
不是线程本地的,而是本地的 。这个 Ruby 1.8中不存在混淆,因为光纤只有可用 从Ruby 1.9开始。 Ruby 1.9选择方法表现为本地光纤 为动态范围保存以下习语。