Ruby Language Chaque


Exemple

Ruby possède de nombreux types d'énumérateurs, mais le premier et le plus simple type d'énumérateur pour commencer est each . Nous imprimerons even ou odd pour chaque nombre entre 1 et 10 pour montrer comment each fonctionne.

Fondamentalement, il y a deux façons de faire passer les soi-disant blocks . Un block est un morceau de code passé qui sera exécuté par la méthode appelée. each méthode prend un block qu'elle appelle pour chaque élément de la collection d'objets sur laquelle elle a été appelée.

Il existe deux manières de transmettre un bloc à une méthode:

Méthode 1: Inline

(1..10).each { |i| puts i.even? ? 'even' : 'odd' }

C'est un moyen très compressé et ruby de résoudre ce problème. Décomposons cela pièce par pièce.

  1. (1..10) est une plage de 1 à 10 inclus. Si nous voulions qu'il soit exclusif de 1 à 10 , nous écririons (1...10) .
  2. .each est un énumérateur qui énumère each élément de l'objet sur lequel il agit. Dans ce cas, il agit sur each nombre de la plage.
  3. { |i| puts i.even? ? 'even' : 'odd' } est le bloc de each instruction, qui peut encore être décomposé.
    1. |i| cela signifie que chaque élément de la plage est représenté dans le bloc par l'identifiant i .
    2. puts est une méthode de sortie dans Ruby qui a un saut de ligne automatique après chaque impression. (Nous pouvons utiliser print si nous ne voulons pas le saut de ligne automatique)
    3. i.even? vérifie si i pair. Nous aurions aussi pu utiliser i % 2 == 0 ; Cependant, il est préférable d'utiliser des méthodes intégrées.
    4. ? "even" : "odd" c'est l'opérateur ternaire de ruby. La manière dont un opérateur ternaire est construit est l' expression ? a : b . C'est court pour
    if expression
      a
    else
      b
    end
    

Pour un code supérieur à une ligne, le block doit être transmis en tant que multiline block .

Méthode 2: multiligne

(1..10).each do |i|
  if i.even?
    puts 'even'
  else
    puts 'odd'
  end
end

Dans un multiline block le do remplace le support d'ouverture et la end remplace le crochet de fermeture du style en inline .

Ruby prend également en charge reverse_each. Il va parcourir le tableau en arrière.

@arr = [1,2,3,4]
puts @arr.inspect # output is [1,2,3,4]

print "Reversed array elements["
@arr.reverse_each do |val|
        print " #{val} " # output is 4 3 2 1
end
print "]\n"