假设我想要一个呼叫运行,如果它失败了,那没什么大不了的; 程序可以继续没有问题.(我知道这通常是不好的做法,但想象一个假设的,快速的一次性脚本,而不是一个大项目)
我被教导这样做的方式是:
begin
thing_to_try
rescue
# awkward blank rescue block
end
next_thing
Run Code Online (Sandbox Code Playgroud)
当然,还有其他方法可以做到这一点,包括使用ensure
和类似的东西.但有没有办法让方法调用/阻止静默失败而没有一个凌乱的空白块?
Ben*_*hes 21
这是相同的想法,但不那么冗长,但您可以使用内联语法
thing_to_try rescue nil
next_thing
Run Code Online (Sandbox Code Playgroud)
wup*_*tah 13
这样的方法可能会有所帮助.
def squelch(exception_to_ignore = StandardError, default_value = nil)
yield
rescue Exception => e
raise unless e.is_a?(exception_to_ignore)
default_value
end
Run Code Online (Sandbox Code Playgroud)
您可以在内部定义此方法class Object
以获得通用可用性.
然后你可以写:
squelch { foo } || squelch { bar }
Run Code Online (Sandbox Code Playgroud)
使用此方法的真正优势是您可以使用多行块,因为内联rescue
只能用于单个语句.