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.