我从rubocop获得Style/Next: Use next to skip iteration.的代码,用于执行类似的操作(使用一个非常做作的示例):

tasks_running = [{ name: 'task1', done: false }, { name: 'task2', done: false }]
tasks_done = []

tasks_running.each do |task|
  if task[:done]
    unless tasks_done.include? task
      tasks_done << task
      next
    end
  end
end

我使用next跳过嵌套条件中的迭代。我不太明白如何满足这个标准。

最佳答案

我认为这是在抱怨,因为如果tasks_done包含块中的当前任务,您可以使用next,否则,将该任务推送到tasks\u done数组:

tasks_running.each do |task|
  if task[:done]
    next if tasks_done.include?(task)
    tasks_done << task
  end
end

在您的例子中,下一个语句是evaluate always,因为它是块中的最后一个表达式,它做了它必须做的所有事情,而只是继续迭代,就好像它不在那里一样。
tasks_running.each do |task|
  if task[:done]                     # If true
    unless tasks_done.include?(task) # If true
      tasks_done << task             # Do this
      next                           # And jump to the next element
    end
  end
end

08-25 15:09
查看更多