【发布时间】:2010-02-22 05:12:47
【问题描述】:
是否有任何内置方法要求将块传递给 Ruby 方法?我意识到如果block_given? 为假,我可以引发异常,但有更好的方法吗?
【问题讨论】:
标签: ruby
是否有任何内置方法要求将块传递给 Ruby 方法?我意识到如果block_given? 为假,我可以引发异常,但有更好的方法吗?
【问题讨论】:
标签: ruby
只需使用yield。
如果您在方法中包含yield,并且未给出块,则会引发错误。
把它放在一个文件中并运行它:
def needs_block
yield
end
needs_block
它会抛出这样的错误:
LocalJumpError: no block given
from (irb):14:in `needs_block'
from (irb):16
【讨论】:
raise 'need block' unless block_given?
【讨论】:
如果你的方法需要一个块,Ruby 会提示它。 raise 关键字不需要阻塞,它只提示处理异常的消息。
可以是上面例子中的方法
def needs_block
yield
end
needs_block
或者你可能需要一个 Proc
def needs_block(&Proc)
proc.call
end
无论如何,添加 raise block_given?会很好。
"raise 方法来自 Kernel 模块。默认情况下,raise 创建 RuntimeError 类的异常。引发异常 特定的类,您可以将类名作为参数传递给 提高”。
【讨论】: