我正在编写一些DSL,我希望有一个可再利用的方法,可以产生一个块并捕获任何异常。
示例:
def trap_exception(&block)
yield
rescue StandardError => e
log "Error: #{e.message}"
next
end
然后我就这样使用它:
# items is an array
items.each do |item|
trap_exception do
# something that might raise an exception. If so, pass to the next item in array
end
end
这会引发错误,因为next
未在可枚举内被调用。
我希望将trap_exception
块中的代码保持尽可能干净。我也会在很多不同的地方使用这种方法,所以我尽量减少代码重复。
实现这一目标的最佳方法是什么?