I blocchi sono ovunque in Ruby: quel do...end (o le graffe) che passi a un metodo.
[1, 2, 3].each { |n| puts n }
quadrato = ->(x) { x * x } # lambda
quadrato.call(5) # => 25
somma = Proc.new { |a, b| a + b }
somma.call(2, 3) # => 5
Blocco, Proc e lambda sono tutti "pezzi di codice trasportabili", ma con due differenze chiave: la lambda controlla il numero di argomenti (errore se sbagli), la Proc no; e un return dentro una lambda esce dalla lambda, dentro una Proc esce dal metodo che la contiene.
Regola pratica: usa la lambda quando vuoi qualcosa che si comporta come una funzione vera.