如何在Ruby中需要一个块?

时间:2010-02-22 05:12:48

标签: ruby

是否有任何内置方法要求将块传递给Ruby方法?我知道如果block_given?为假,我可以提出异常,但有没有更好的方法呢?

3 个答案:

答案 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?会很好。

Here says

“ raise方法来自内核模块。默认情况下,raise创建 RuntimeError类的异常。提出一个例外 特定的类,您可以将类名作为参数传递给 加薪”。