Ruby - Blocchi

Hai visto come Ruby definisce i metodi in cui puoi inserire un numero di istruzioni e poi chiami quel metodo. Allo stesso modo, Ruby ha un concetto di Block.

  • Un blocco è costituito da blocchi di codice.

  • Assegnate un nome a un blocco.

  • Il codice nel blocco è sempre racchiuso tra parentesi graffe ({}).

  • Un blocco viene sempre richiamato da una funzione con lo stesso nome di quella del blocco. Ciò significa che se hai un blocco con il nome test , allora utilizzi la funzione test per richiamare questo blocco.

  • Si richiama un blocco utilizzando l' istruzione yield .

Sintassi

block_name {
   statement1
   statement2
   ..........
}

Qui imparerai a invocare un blocco usando una semplice dichiarazione di rendimento . Imparerai anche a usare un'istruzione yield con parametri per invocare un blocco. Controllerai il codice di esempio con entrambi i tipi di dichiarazioni di rendimento .

La dichiarazione di rendimento

Diamo un'occhiata a un esempio della dichiarazione di rendimento:

#!/usr/bin/ruby

def test
   puts "You are in the method"
   yield
   puts "You are again back to the method"
   yield
end
test {puts "You are in the block"}

Questo produrrà il seguente risultato:

You are in the method
You are in the block
You are again back to the method
You are in the block

Puoi anche passare parametri con la dichiarazione di rendimento. Ecco un esempio:

#!/usr/bin/ruby

def test
   yield 5
   puts "You are in the method test"
   yield 100
end
test {|i| puts "You are in the block #{i}"}

Questo produrrà il seguente risultato:

You are in the block 5
You are in the method test
You are in the block 100

Qui, la dichiarazione di rendimento è scritta seguita dai parametri. Puoi anche passare più di un parametro. Nel blocco, inserisci una variabile tra due linee verticali (||) per accettare i parametri. Pertanto, nel codice precedente, l'istruzione yield 5 passa il valore 5 come parametro al blocco di test.

Ora, guarda la seguente dichiarazione:

test {|i| puts "You are in the block #{i}"}

Qui, il valore 5 viene ricevuto nella variabile i . Ora, osserva la seguente dichiarazione put :

puts "You are in the block #{i}"

L'output di questa istruzione put è:

You are in the block 5

Se vuoi passare più di un parametro, la dichiarazione di rendimento diventa -

yield a, b

e il blocco è -

test {|a, b| statement}

I parametri saranno separati da virgole.

Blocchi e metodi

Hai visto come un blocco e un metodo possono essere associati tra loro. Normalmente si richiama un blocco utilizzando l'istruzione yield da un metodo che ha lo stesso nome di quello del blocco. Pertanto, scrivi -

#!/usr/bin/ruby

def test
   yield
end
test{ puts "Hello world"}

Questo esempio è il modo più semplice per implementare un blocco. Si chiama il blocco di test utilizzando l' istruzione yield .

Ma se l'ultimo argomento di un metodo è preceduto da &, allora puoi passare un blocco a questo metodo e questo blocco verrà assegnato all'ultimo parametro. Nel caso in cui sia * che & siano presenti nell'elenco degli argomenti, & dovrebbe venire dopo.

#!/usr/bin/ruby

def test(&block)
   block.call
end
test { puts "Hello World!"}

Questo produrrà il seguente risultato:

Hello World!

Blocchi BEGIN e END

Ogni file sorgente di Ruby può dichiarare i blocchi di codice da eseguire mentre il file viene caricato (i blocchi BEGIN) e dopo che il programma ha terminato l'esecuzione (i blocchi END).

#!/usr/bin/ruby

BEGIN { 
   # BEGIN block code 
   puts "BEGIN code block"
} 

END { 
   # END block code 
   puts "END code block"
}
   # MAIN block code 
puts "MAIN code block"

Un programma può includere più blocchi BEGIN e END. I blocchi BEGIN vengono eseguiti nell'ordine in cui vengono rilevati. I blocchi END vengono eseguiti in ordine inverso. Quando viene eseguito, il programma di cui sopra produce il seguente risultato:

BEGIN code block
MAIN code block
END code block