Rubocop: используйте рядом, чтобы пропустить итерацию - PullRequest
0 голосов
/ 03 мая 2018

Я получаю Style/Next: Use next to skip iteration. от Rubocop для кода, который делает что-то вроде этого (используя очень надуманный пример):

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

I am , использующий next для пропуска итерации только во вложенном условии. Я не совсем понимаю, как удовлетворить этот критерий.

1 Ответ

0 голосов
/ 03 мая 2018

Я думаю, что жалуется, потому что вы могли бы использовать 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
...