gpt4 book ai didi

Ruby 线程和变量

转载 作者:数据小太阳 更新时间:2023-10-29 07:03:50 25 4
gpt4 key购买 nike

为什么结果不是从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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com