2009-11-16 8 views

risposta

5

Lambdas (che esistono anche in altre lingue) sono come funzioni ad hoc, create solo per un uso semplice piuttosto che per eseguire alcune azioni complesse.

Quando si utilizza un metodo come Array#collect che prende un blocco nel {}, si sta essenzialmente creando un lambda/proc/blocco solo per l'utilizzo di tale metodo.

a = [1, 2, 3, 4] 
# Using a proc that returns its argument squared 
# Array#collect runs the block for each item in the array. 
a.collect {|n| n**2 } # => [1, 4, 9, 16] 
sq = lambda {|n| n**2 } # Storing the lambda to use it later... 
sq.call 4 # => 16 

Vedi Anonymous functions su Wikipedia, e alcuni other SO questions per le sfumature della lambda vs. Proc.

+0

Nell'esempio precedente potrebbe ancora essere eseguito senza lambda. La raccolta non è la stessa di un ciclo successivo con il blocco che rappresenta il corpo? Sto solo cercando di vedere i vantaggi dell'utilizzo del blocco. – Zubair

+0

Ovviamente si può fare con un ciclo for, ma questo è un modo più elegante e ruby ​​per farlo. Altri metodi potrebbero essere più difficili da duplicare con un ciclo. – jtbandes

+0

Ok, immagino sarebbe utile sapere quali cose posso fare con Lambdas e Procs altrimenti sarebbe troppo prolisso, magari con un esempio. – Zubair

Problemi correlati