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.如果你只是删除删除,你将不再改变数组,迭代将按预期工作.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ajax的success函数和error函数中使用 $(this)不生效
- ruby-on-rails – 如何使用Passenger和Apache设置RAILS_ENV
- iphone – iOS – 我可以在运行时更改localizable.strings内
- 关于C#代表的一个问题
- objective-c – UITableViewCell图像未更新
- 设计模式六大原则(1):单一职责原则
- TDD:正确的项目开发思路
- postgresql整体架构和存储引擎的大体分析
- Preference类中xml里属性的用法和介绍记录
- net.sf.json.JSONException: java.lang.reflect.Invocation