Menu
Coddy logo textTech

La keyword yield

Fa parte della sezione Logica e flusso del percorso Ruby di Coddy. Lezione 17 di 56.

I metodi che definisci tu possono accettare un blocco, proprio come quelli integrati. All'interno del metodo, la parola chiave yield esegue il blocco passato dal chiamante.

def greet
  puts "Before block"
  yield
  puts "After block"
end

greet do
  puts "Hi from the block!"
end
# Prima del blocco
# Ciao dal blocco!
# Dopo il blocco

Puoi passare argomenti al blocco fornendoli a yield:

def with_each(items)
  items.each { |item| yield item }
end

with_each([10, 20, 30]) { |n| puts n }
# 10
# 20
# 30

Se un metodo chiama yield ma chi lo chiama non ha passato un blocco, Ruby genera un errore. block_given? ti permette di verificare prima:

def maybe
  yield if block_given?
end

maybe                       # no pasa nada
maybe { puts "called!" }    # called!
challenge icon

Sfida

Facile

Definisci un metodo chiamato repeat che accetta un argomento n (un intero) e passa i valori 1, 2, ..., n al suo blocco, uno alla volta.

Poi chiama il tuo metodo con n = 4 e un blocco che stampa "Got <value>" per ogni valore passato.

L'output è:

Got 1
Got 2
Got 3
Got 4

Provalo tu

# TODO: define `repeat` para que pase 1..n a su bloque

# TODO: llama a repeat(4) con un bloque que imprima "Got <value>"
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Ruby online