我有这样的:红宝石环路跳过元素
puts pids
pids.each do |pid|
puts "Running on pid #{pid}"
begin
Process::kill(0, pid)
puts "Pid #{pid} still alive"
rescue Errno::ESRCH
puts "Pid #{pid} now dead!!!!"
pids.delete(pid)
running_jobs -= 1
puts "Remaining jobs: #{running_jobs}"
end
end
它输出这样的:
25555
25579
25616
Running on pid 25555
Pid 25555 now dead!!!!
Remaining jobs: 2
Running on pid 25616
Pid 25616 now dead!!!!
Remaining jobs: 1
正如你所看到的,循环从未中间元素上执行。任何人都可以告诉我为什么那样发生?我需要真正地循环每个项目并相应地处理它。
您不想在迭代同一个集合的同时删除集合中的元素。 (我认为这在大多数编程语言中都是正确的。)除了@ klochner关于您特定情况的帖子外,还可以查看这些帖子以了解从Ruby中的数组中删除所选项目的其他方式:http://stackoverflow.com/问题/ 3260686/how-can-i-use-arraydelete-while-iterating-over-the-array http://stackoverflow.com/questions/2933366/deleting-while-iterating-in-ruby – Telemachus 2012-02-10 00:24:45
由于某种原因,我觉得就像我已经能够在我编写的其他程序中做到的那样。我将不得不稍后尝试。我是Ruby的新手,非常感谢帮助。 – jeffcook2150 2012-02-10 00:43:03