Você sabe que tudo em Ruby é um objeto. Exceto blocos.
Você pode transformar esses blocos em objetos usando a função Proc.
proc = Proc.new do |object|
puts object.inspect
end
Esta é a maneira mais comum de fazer isso e, em seguida, você pode chamar seu novo objeto por meio da função de chamada .
proc.call Object
A chamada do método é usada para executar o bloco. Em blocos, você pode fazer o que quiser. Um caso interessante é o do processamento sequencial. No Rails é freqüentemente usado na definição de escopos nomeados.
A outra maneira é usar lambda (<3):
lambda = lambda do |object|
puts object.inspect
end
Basicamente, Proc e lambda funcionam da mesma maneira. Mas há uma pequena diferença, que é sobre o controle de fluxo, no caso return
, break
, redo
, retry
, e outros, vai quebrar o seu Proc.