Pasar el bloque en un método - Ruby [duplicado]

Esta pregunta ya tiene una respuesta aquí:

El bloque de código pasado a cada uno funciona con corchetes pero no con 'do' - 'end' (ruby) 3 respuestas

Tengo una pequeña pregunta sobre pasar el bloque.

def a_method(a, b)
  a + yield(a, b)
end

Esto funciona bien.

k = a_method(1, 2) do |x, y| 
  (x + y) * 3 
end
puts k

Pero esto no funcionará.

puts a_method(1, 2) do |x, y| 
  (x + y) * 3 
end
# LocalJumpError: no block given (yield)

¿Alguien puede explicarme esto amablemente?

Gracias. Ejemplo tomado de Metaprogramming Ruby por Paolo Perrotta. Gran libro.

Respuestas a la pregunta(2)

Su respuesta a la pregunta