Menu
Coddy logo textTech

Proc e Lambda

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

Un blocco non è un oggetto: non puoi memorizzarlo in una variabile. Quando vuoi un pezzo di codice che puoi passare, salvare e chiamare in seguito, lo racchiudi in una Proc o in una lambda.

Una Proc viene creata con Proc.new o con la parola chiave proc. Chiamala con .call:

double = proc { |n| n * 2 }
puts double.call(5)   # 10
puts double.call(7)   # 14

Una lambda è simile, ma più rigorosa: verifica che tu passi il numero corretto di argomenti. La forma con la freccia -> è la sintassi più comune:

square = ->(n) { n * n }
puts square.call(4)   # 16
puts square.(4)       # 16  (forma abbreviata di .call)

Entrambi possono essere passati a un metodo che si aspetta un blocco anteponendo &:

[1, 2, 3].map(&double)   # [2, 4, 6]
[1, 2, 3].map(&square)   # [1, 4, 9]

Usa una lambda quando vuoi un controllo degli argomenti più rigoroso; usa un Proc quando vuoi un comportamento più leggero e permissivo.

challenge icon

Sfida

Facile

Crea una lambda chiamata tripler che accetta un numero e lo restituisce moltiplicato per 3.

Poi leggi un elenco di numeri interi separati da virgole e stampa, su righe separate:

  1. Il risultato della chiamata a tripler.call(10)
  2. I numeri di input triplicati (usa map(&tripler)) e uniti con ,

Per l'input 1,2,3, l'output è:

30
3, 6, 9

Provalo tu

# TODO: definisci `tripler` come una lambda

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: riga 1, stampa tripler.call(10)
# TODO: riga 2, applica map a numbers con &tripler, poi unisci con ", "
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