首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby队列和Typhoeus的异常行为

Ruby队列和Typhoeus的异常行为
EN

Stack Overflow用户
提问于 2015-06-30 09:26:00
回答 1查看 46关注 0票数 0

我有一个非常不寻常的行为,q.pop的返回obj没有相应地更新。我将使用psuedo-code进行演示...

代码语言:javascript
复制
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”时,对象每次都是相同的!

如果我用下面这样的数组替换相同的代码:

代码语言:javascript
复制
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“的唯一输出。

有没有人遇到过这样的问题?

对问题/解决方案有什么见解?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-06-30 10:40:39

问题解决了!我会回答我自己的问题,以防以后有人需要它。

问题: while循环使用的极不寻常的作用域。

在Ruby中的while循环中,循环的每次迭代都不会终止。这就是我的意思

代码语言:javascript
复制
while true
    i = 10
    break
end
puts i    # this will actually print out 10

然而,

代码语言:javascript
复制
loop do
    i = 10
    break
end
puts i    # raises error

简而言之:当我使用一个带有队列的while循环时,问题是前一个循环的迭代没有被“擦除”,因此影响了后面的迭代。

当有疑问时,使用循环,而不是while。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31128107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档