ruby - Rubocop:使用 next 跳过迭代

标签 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

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

最佳答案

我认为是提示,因为如果 tasks_done 包含 block 中的当前任务,您可以使用 next,否则,将该任务推送到 tasks_done 数组:

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

在你的例子中,下一条语句总是被评估,因为它是 block 中的最后一个表达式,它做了它必须做的所有事情,只是继续迭代,因为它不会在那里。

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

关于ruby - Rubocop:使用 next 跳过迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50146126/

相关文章:

Ruby 不熟悉的字符串使用 Integer.chr 和 "\001"

ruby - 在 ubuntu 上安装 rvm 的问题

ruby-on-rails - 如何使用 Ruby 中的 Google Sheets Api 格式化 dd/mm/yyyy 中的多个日期类型列?

activeadmin - 能否仅在某些路径上禁用 rubocop 检查?

ruby - 语法错误,意外的 keyword_rescue,期待 keyword_end

ruby-on-rails - Rubocop/Hound 建议卡住字符串文字类名

ruby - 第一次间隔后 VCR 自动重新录制不录制

ruby - HTTP 请求路径为空 (ArgumentError)

function - Neovim 中的 ALE Fixer 配置

ruby-on-rails - Rubocop 和 capybara : detecting forgotten focus: :true