我有這樣的:紅寶石環路跳過元素
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