2011-08-15 7 views
35

mam sposób, że wydajność, która wygląda następująco:Czy istnieją lepsze sposoby na uniknięcie "plonów", gdy żaden blok nie jest przekazywany?

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

że aby ten sposób, aby doprowadzić do bloku, jeżeli blok jest przekazywana; a jeśli nie blok jest przekazywana w sposób powinien sliently pominąć sentense plastyczności bez upaść z czymś takim:

no block given (yield) (LocalJumpError) 

Oczywiście, najprostszym sposobem jest zmiana metody:

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

Ale nie ma ładniejszych sposobów?

Odpowiedz

67

Tak! :)

+7

Zauważ, że jest to również szybsze niż przechwytywanie bloku (z '& blokiem'). –

+1

fajne! Wielkie dzięki! – Tao

+1

I freaking zawsze zapomnieć nazwę 'block_given?' –

Powiązane problemy