2011-08-15 10 views
35

I tienen un método que los rendimientos, que se parece:¿Hay formas mejores de evitar el "rendimiento" cuando no se pasa ningún bloque?

def a_method(*params) 
    # do something 
    yield 
    # do something else 
end 

Quiero este método para producir el bloque si un bloque se pasa en; y si no hay un bloque se pasa, el método debe saltarse sliently la sentense rendimiento sin chocar con algo como:

no block given (yield) (LocalJumpError) 

Por supuesto, la forma más sencilla es cambiar el método a:

def a_method(*params, &block) 
    # do something 
    yield if block 
    # do something else 
end 

Pero ¿No hay formas más bonitas?

Respuesta

67

Sí! :)

def a_method(*params) 
    # ... 
    yield if block_given? 
    # ... 
end 
+7

Tenga en cuenta que también es más rápido que capturar un bloque (con '& block'). –

+1

¡genial! ¡Muchas gracias! – Tao

+1

Estoy volviendo loco siempre olvidar el nombre de 'block_given?' –

Cuestiones relacionadas