2010-02-22 15 views
18

¿Hay algún modo integrado para exigir que se pase un bloque a un método de Ruby? Me doy cuenta de que puedo hacer una excepción si block_given? es falso, pero ¿hay alguna forma más agradable de hacerlo?¿Cómo requerir un bloque en Ruby?

Respuesta

22

Simplemente usando yield.

Si incluye yield en un método y un bloque es no dado, arroja un error.

poner esto en un archivo y ejecutarlo:

def needs_block 
    yield 
end 

needs_block 

Se generará un error como este:

LocalJumpError: no block given 
    from (irb):14:in `needs_block' 
    from (irb):16 
+1

Está bien que era demasiado fácil :) Gracias! –

9
raise 'need block' unless block_given? 
+1

Esta es la mejor respuesta, ya que no tiene efectos secundarios (es decir, llamar al bloque). –

Cuestiones relacionadas