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 bloccoPuoi 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
# 30Se 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!Sfida
FacileDefinisci 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 4Provalo tu
# TODO: define `repeat` para que pase 1..n a su bloque
# TODO: llama a repeat(4) con un bloque que imprima "Got <value>"
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Panoramica dei metodi delle stringheInterpolazione di stringheIterare sulle stringheDividere e unireRiepilogo - Tessitore di stringhe4Blocchi, Proc e Lambda
Che cos’è un Block?do..end vs parentesi graffeLa keyword yieldParametri del BlockProc e LambdaRiepilogo - Iteratore personalizzato7Hash in Ruby - Parte 2
Hash.new con valori predefinitiIterare sugli hashHash annidatiUnire e trasformareRipasso - Contatore di frequenza10Progetto - Registri degli studenti
Panoramica del progettoAggiungere uno studente2Intervalli
Che cos'è un intervallo?Metodi degli intervalliIntervalli in Case / WhenRiepilogo - Esercitarsi con gli intervalli5La potenza di Enumerable
Select e RejectConcatenare MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRiepilogo - Pipeline di datiEsercitati da solo: Compilatore Ruby online