2011-08-15 62 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'的名字? –

相关问题