In Ruby, how do I skip a loop in a .each loop, similar to 'continue' [duplicate] In Ruby, how do I skip a loop in a .each loop, similar to 'continue' [duplicate] ruby ruby

In Ruby, how do I skip a loop in a .each loop, similar to 'continue' [duplicate]


Use next:

(1..10).each do |a|  next if a.even?  puts aend

prints:

13   579

For additional coolness check out also redo and retry.

Works also for friends like times, upto, downto, each_with_index, select, map and other iterators (and more generally blocks).

For more info see http://ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UL.


next - it's like return, but for blocks! (So you can use this in any proc/lambda too.)

That means you can also say next n to "return" n from the block. For instance:

puts [1, 2, 3].map do |e|  next 42 if e == 2  eend.inject(&:+)

This will yield 46.

Note that return always returns from the closest def, and never a block; if there's no surrounding def, returning is an error.

Using return from within a block intentionally can be confusing. For instance:

def my_fun  [1, 2, 3].map do |e|    return "Hello." if e == 2    e  endend

my_fun will result in "Hello.", not [1, "Hello.", 2], because the return keyword pertains to the outer def, not the inner block.