Ruby 为什么我的代码无限期地挂起?

Ruby 为什么我的代码无限期地挂起?,ruby,Ruby,我试图运行以下使用Nokogiri的代码,但是当它进入第161次迭代时,它就被卡住了。列表是解析文件后创建的一组节点 我想知道为什么会发生这种情况,可能是因为内存不足吗?如果它被无限期地悬挂,我还能检查什么呢 for i in 0...list.length puts i # puts list[i].inner_html while isReady(list[i]) list[i].inner_html = "#{list[i+1].inner_html}" lis

我试图运行以下使用Nokogiri的代码,但是当它进入第161次迭代时,它就被卡住了。列表是解析文件后创建的一组节点

我想知道为什么会发生这种情况,可能是因为内存不足吗?如果它被无限期地悬挂,我还能检查什么呢

for i in 0...list.length
  puts i
  # puts list[i].inner_html
  while isReady(list[i])
    list[i].inner_html = "#{list[i+1].inner_html}"
    list[i+1].remove
  end
end

问题已解决我刚刚意识到列表[I+1]。删除并没有删除,这就是为什么它在while循环中无限期地挂起。谢谢您的建议。

当调用i==list.length和list[i+1].remove()时会发生什么?这看起来很麻烦。

当i==list.length,并且调用list[i+1].remove()时会发生什么?这看起来很麻烦。

您需要为您正在做的事情提供更多的上下文。文件有多大?你想干什么?什么是
isReady()
,因为这就是循环,除非list.length大得离谱,或者list.length+运行
isReady
的时间超过了你的耐心。完全同意提姆的说法。除此之外,将第一行更改为
list.each|u index do | i |
。这更容易理解。你需要为你正在做的事情提供更多的背景。文件有多大?你想干什么?什么是
isReady()
,因为这就是循环,除非list.length大得离谱,或者list.length+运行
isReady
的时间超过了你的耐心。完全同意提姆的说法。除此之外,将第一行更改为
list.each|u index do | i |
。这更容易理解。