如何在ruby中正确跳过迭代?

drnojrws  于 2023-10-17  发布在  Ruby
关注(0)|答案(1)|浏览(113)

我尝试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

error说:

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的工作不是跳过一个迭代吗?有谁能告诉我哪里做错了吗?谢谢你,谢谢

uidvcgyl

uidvcgyl1#

这里的错误发生是因为当你调用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

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

相关问题