Ruby Language Contrôle de boucle avec break, next et redo


Exemple

Le flux d'exécution d'un bloc Ruby peut être contrôlé avec les instructions break , next et redo .

break

La déclaration de break sortira immédiatement du bloc. Toutes les instructions restantes dans le bloc seront ignorées et l'itération se terminera comme suit:

actions = %w(run jump swim exit macarena)
index = 0

while index < actions.length
  action = actions[index]

  break if action == "exit"

  index += 1
  puts "Currently doing this action: #{action}"
end

# Currently doing this action: run
# Currently doing this action: jump
# Currently doing this action: swim

next

L'instruction next retournera immédiatement en haut du bloc et poursuivra l'itération suivante. Toutes les instructions restantes dans le bloc seront ignorées:

actions = %w(run jump swim rest macarena)
index = 0

while index < actions.length
  action = actions[index]
  index += 1

  next if action == "rest"

  puts "Currently doing this action: #{action}"
end

# Currently doing this action: run
# Currently doing this action: jump
# Currently doing this action: swim
# Currently doing this action: macarena

redo

L'instruction redo retourne immédiatement en haut du bloc et réessaie la même itération. Toutes les instructions restantes dans le bloc seront ignorées:

actions = %w(run jump swim sleep macarena)
index = 0
repeat_count = 0

while index < actions.length
  action = actions[index]
  puts "Currently doing this action: #{action}"

  if action == "sleep"
    repeat_count += 1
    redo if repeat_count < 3
  end

  index += 1
end

# Currently doing this action: run
# Currently doing this action: jump
# Currently doing this action: swim
# Currently doing this action: sleep
# Currently doing this action: sleep
# Currently doing this action: sleep
# Currently doing this action: macarena

Enumerable

Outre les boucles, ces instructions fonctionnent avec les méthodes d'itération Enumerable, telles que each et la map :

[1, 2, 3].each do |item|
  next if item.even?
  puts "Item: #{item}"
end

# Item: 1
# Item: 3

Bloquer les valeurs de résultat

Dans les instructions break et next , une valeur peut être fournie et sera utilisée comme valeur de résultat de bloc:

even_value = for value in [1, 2, 3]
  break value if value.even?
end

puts "The first even value is: #{even_value}"

# The first even value is: 2