有没有办法在 ruby 中执行旧的“on error resume next”例程?
我已经从其他地方动态填充了一系列值(准确地说是从 MQTT 主题中读取),然后我想对它们进行一堆数值计算并发布结果。这些值应该是数字,但可能缺少或非数字。
目前我的代码看起来像
values=[]
//values get loaded here
begin
Publish('topic1',value[0]*10+value[1])
rescue TypeError,NoMethodError,ZeroDivisionError
end
begin
Publish('topic2',value[3]/value[4])
rescue TypeError,NoMethodError,ZeroDivisionError
end
//etc etc
如果由于任何原因计算失败,程序应该跳过该步骤并继续。
它有效,但肯定有比所有相同的 begin..rescue 块更好的方法吗?毕竟,Ruby 是关于“DRY”的。
有没有办法重写上面的内容,以便使用单个 begin..rescue 构造,同时仍然允许尝试所有计算?
更新
做类似的事情有多安全
def safe_Publish(topic,value)
return if value.nil?
Publish(topic,value)
end
并使用 safe_Publish('topic2',(value[3]/value[4] rescue nil)) 调用
主要问题是,上面的内容不仅捕获了我所期待的所有异常,这让我有点紧张。