2011-08-15 93 views
35

我有產率,它看起來像一個方法:有沒有更好的方法來防止沒有塊傳入時的「收益」?

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

我想如果一個塊被傳入該方法以得到所述塊;如果沒有塊被傳入,該方法應該sliently跳過產量sentense不喜歡的東西崩潰:

no block given (yield) (LocalJumpError) 

當然,最直接的方法是改變方法:

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

但沒有更漂亮的方法嗎?

回答

67

是的! :)

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

請注意,它也比捕獲一個塊(使用'&block')更快。 –

+1

酷!非常感謝! – Tao

+1

我嚇壞了,總是忘記'block_given'的名字? –

相關問題