作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
为什么结果不是从1到10,而是只有10?
require 'thread'
def run(i)
puts i
end
while true
for i in 0..10
Thread.new{ run(i)}
end
sleep(100)
end
结果:
10
10
10
10
10
10
10
10
10
10
10
为什么循环?我正在运行 while 循环,因为稍后我想一直遍历数据库表并回显从数据库中检索到的任何记录。
最佳答案
传递给 Thread.new
的 block 实际上可能在将来的某个时间点开始,到那时 i
的值可能已经改变。在您的情况下,在所有线程实际运行之前,它们都已增加到 10
。
要解决此问题,请使用 Thread.new
的形式除了 block 之外,它还接受一个参数:
require 'thread'
def run(i)
puts i
end
while true
for i in 0..10
Thread.new(i) { |j| run(j) }
end
sleep(100)
end
这会在调用 new
时将 block 变量 j
设置为 i
的值。
关于Ruby 线程和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24707195/
我是一名优秀的程序员,十分优秀!