Ruby Language Ogni


Esempio

Ruby ha molti tipi di enumeratori ma il primo e più semplice tipo di enumeratore da cui iniziare è each . Faremo stampare even o odd per ogni numero compreso tra 1 e 10 per mostrare come each opera.

Fondamentalmente ci sono due modi per passare i cosiddetti blocks . Un block è un pezzo di codice che viene passato che verrà eseguito dal metodo chiamato. each metodo prende un block che chiama per ogni elemento della collezione di oggetti su cui è stato chiamato.

Esistono due modi per passare un blocco a un metodo:

Metodo 1: in linea

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

Questo è un modo molto compresso e rubino per risolvere questo. Rompiamo questo pezzo per pezzo.

  1. (1..10) è un intervallo compreso tra 1 e 10 inclusi. Se volessimo che fosse da 1 a 10 esclusivi, scriveremmo (1...10) .
  2. .each è un enumeratore che enumera su each elemento nell'oggetto su cui sta agendo. In questo caso, agisce su each numero nell'intervallo.
  3. { |i| puts i.even? ? 'even' : 'odd' } è il blocco per each istruzione, che a sua volta può essere ulteriormente suddivisa.
    1. |i| questo significa che ogni elemento nell'intervallo è rappresentato all'interno del blocco dall'identificatore i .
    2. puts è un metodo di output in Ruby che ha un'interruzione di riga automatica ogni volta che viene stampata. (Possiamo usare la print se non vogliamo l'interruzione automatica della linea)
    3. i.even? controlla se i è pari. Avremmo potuto usare anche i % 2 == 0 ; tuttavia, è preferibile utilizzare metodi incorporati.
    4. ? "even" : "odd" questo è l'operatore ternario di Ruby. Il modo in cui un operatore ternario è costruito è expression ? a : b . Questo è l'abbreviazione di
    if expression
      a
    else
      b
    end
    

Per il codice più lungo di una riga, il block deve essere passato come un multiline block .

Metodo 2: multilinea

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

In un multiline block il do sostituisce la parentesi aperta e end sostituisce la parentesi chiusa dallo stile in inline .

Ruby supporta anche reverse_each. Ripeterà l'array all'indietro.

@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"