Rubocop:使用旁边的跳过迭代

时间:2018-05-03 02:37:12

标签: ruby rubocop

我从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

在嵌套条件下使用旁边跳过迭代。我不太清楚如何满足这个标准。

1 个答案:

答案 0 :(得分:4)

我认为是抱怨,因为你可以使用next,以防tasks_done包含来自块的当前任务,否则,将该任务推送到tasks_done数组:

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

在你的情况下,下一个语句总是被评估,因为它是块中的最后一个表达式,它完成了它必须做的所有事情,并且只是继续迭代,就像它不会在那里一样

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