是否有任何内置方法要求将块传递给Ruby方法?我知道如果block_given?
为假,我可以提出异常,但有没有更好的方法呢?
答案 0 :(得分:23)
只需使用yield
。
如果在方法中包含yield
,并且某个块未,则会引发错误。
将它放在一个文件中并运行它:
def needs_block
yield
end
needs_block
会抛出这样的错误:
LocalJumpError: no block given
from (irb):14:in `needs_block'
from (irb):16
答案 1 :(得分:12)
raise 'need block' unless block_given?
答案 2 :(得分:1)
如果您的方法需要一个块,Ruby将提示它。 raise关键字不需要阻止,它仅提示您处理异常的消息。
可能是与上述示例类似的方法
def needs_block
yield
end
needs_block
或者您可能需要Proc
def needs_block(&Proc)
proc.call
end
无论如何,加上加薪block_given?会很好。
“ raise方法来自内核模块。默认情况下,raise创建 RuntimeError类的异常。提出一个例外 特定的类,您可以将类名作为参数传递给 加薪”。