我有一个非常不寻常的行为,q.pop的返回obj没有相应地更新。我将使用psuedo-code进行演示...
q = Queue.new
insert unique objects into the q...
while !q.empty? do
curr = q.pop
req = Typhoeus::Request.new("someLegitURL")
req.on_complete do |response|
puts curr #PROBLEM: same result every time!!!
end
end^这里,我面临的问题是,当我“放置curr”时,对象每次都是相同的!
如果我用下面这样的数组替换相同的代码:
arr = Array.new
insert unique objects into the arr...
arr.each do |curr|
... same thing ...
puts curr # NOT A PROBLEM: different result every time
... same thing ...
end^在这里,我实际上得到了"puts“的唯一输出。
有没有人遇到过这样的问题?
对问题/解决方案有什么见解?
谢谢。
发布于 2015-06-30 10:40:39
问题解决了!我会回答我自己的问题,以防以后有人需要它。
问题: while循环使用的极不寻常的作用域。
在Ruby中的while循环中,循环的每次迭代都不会终止。这就是我的意思
while true
i = 10
break
end
puts i # this will actually print out 10然而,
loop do
i = 10
break
end
puts i # raises error简而言之:当我使用一个带有队列的while循环时,问题是前一个循环的迭代没有被“擦除”,因此影响了后面的迭代。
当有疑问时,使用循环,而不是while。
https://stackoverflow.com/questions/31128107
复制相似问题