如果没有空白的“rescue”块,Ruby块/命令会无声地失败
假设我想要一个呼叫运行,如果它失败了,那没什么大不了的; 程序可以继续没有问题。 (我知道这通常是不好的做法,但想象一个假设的,快速的一次性脚本,而不是一个大项目)
我被教导这样做的方式是:
begin thing_to_try rescue # awkward blank rescue block end next_thing
当然,还有其他方法可以做到这一点,包括使用ensure
和类似的东西。 但有没有办法让方法调用/阻止静默失败而没有一个凌乱的空白块?
这样的方法可能会有所帮助。
def squelch(exception_to_ignore = StandardError, default_value = nil) yield rescue Exception => e raise unless e.is_a?(exception_to_ignore) default_value end
您可以在class Object
定义此方法以获得通用可用性。
然后你可以写:
squelch { foo } || squelch { bar }
使用此方法的真正优势是您可以使用多行块,因为内联rescue
只能用于单个语句。
这是相同的想法,但不那么冗长,但您可以使用内联语法
thing_to_try rescue nil next_thing
除了Ben的想法,你还可以为它创建一个function
def suppress_errors(&block) begin yield rescue # awkward blank rescue block end end # call it suppress_errors {puts "abc"} suppress_errors do puts "xyz" end
- 如何使用Ruby on Rails将日期格式09-feb-73转换为02/09/1973(mm / dd / yyyy)
- 处理用户发送的“字符串包含空字节”
- Ruby`require`调用在自定义代码上失败
- ActiveModel :: Serializers Gem – Versioned API命名空间问题
- string.next的反义词是什么?
- will_paginate函数不呈现页面链接
- 在类delcaration之后设置类inheritance或在const_set类上设置类inheritance
- 管理工具中删除文件所有内容的方法
- “require File.dirname(__ FILE__)” – 如何安全地撤消文件系统依赖?