加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby循环跳过元素

发布时间:2020-12-17 01:49:30 所属栏目:百科 来源:网络整理
导读:我有这个: puts pidspids.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: #{runn
我有这个:

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

如您所见,循环永远不会在中间元素上执行.谁能告诉我为什么会这样?我需要真正循环每个项目并相应地处理它.

解决方法

当你用pids.delete(pid)迭代它时你正在改变数组所以你在索引0处于25555,然后你删除它,导致数组看起来像[25579,25616].然后你迭代,现在你在索引1,这是25616.如果你只是删除删除,你将不再改变数组,迭代将按预期工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读