代码之家  ›  专栏  ›  技术社区  ›  Devmix

如何正确地跳过ruby中的迭代?

  •  0
  • Devmix  · 技术社区  · 1 年前

    我正在努力 skip 如果字符串的长度等于4,但我的代码给了我一个错误,则为加法:

    这是我的代码:

    strings = ["one", "two", "four", "abc", "fgh"]
    total = strings.inject(0) do |sum, str|
      next if str.length == 4
     
      sum + str.length
    end
    
    puts total
    

    错误显示:

    main.rb:13:in `block in <main>': undefined method `+' for nil:NilClass (NoMethodError)
            from main.rb:10:in `each'
            from main.rb:10:in `inject'
            from main.rb:10:in `<main>'
    

    不是的工作 next if 跳过迭代?有人能告诉我我做错了什么吗?谢谢

    1 回复  |  直到 1 年前
        1
  •  1
  •   max Mike Williams    1 年前

    出现此错误是因为当您调用 next 将nil传递给循环的下一次迭代。

    strings = ["one", "two", "four", "abc", "fgh"]
    total = strings.inject(0) do |sum, str|
      next sum if str.length == 4
      sum + str.length
    end
    
    # => 12
    

    下一个 实际上并没有跳过迭代。它只是停止块的进一步执行,并有一个返回值。