a diferencia de sintaxis de @block provoca "LocalJumpError: no se proporciona ningún bloque (rendimiento)" [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

Vi un caso extraño, tratando de averiguar qué está pasando aquí:

> def test
>   p yield
> end
=> nil
> test { 1 }
1
=> 1
> p test { 1 }
1
1
=> 1
> p test do
>   1
> end
LocalJumpError: no block given (yield)