ルビーで古い「エラーレジュームネクスト」ルーチンを実行する方法はありますか?
他の場所から動的に値の配列を入力し(正確には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))で呼び出します
主な問題は、上記が私が期待しているものだけでなくすべての例外をキャッチすることであり、それは私を少し緊張させます。