もう1つ興味深いのはalternativeです。あなたが望むものに適応することができます。
貼り最も興味深い部分:
def match_message(regexp)
lambda{ |error| regexp === error.message }
end
begin
raise StandardError, "Error message about a socket."
rescue match_message(/socket/) => error
puts "Error #{error} matches /socket/; ignored."
end
はルビー1.8.7解決のために元のサイトを参照してください。
最近のルビーバージョンではラムダが受け入れられません。オプションは1.8.7で働いていたものを使用することですが、それはすべての比較で新しいクラスを作成するために遅くIM(だと思われるので、私はそれを使用することはお勧めしませんともそれを試していない:。
def exceptions_matching(&block)
Class.new do
def self.===(other)
@block.call(other)
end
end.tap do |c|
c.instance_variable_set(:@block, block)
end
end
begin
raise "FOOBAR: We're all doomed!"
rescue exceptions_matching { |e| e.message =~ /^FOOBAR/ }
puts "rescued!"
end
場合誰かがルビーがラムダサポートを削除したときを知っていますrescue
名前空間を確認して、それが再現されていないかどうかを確認しましたか? –
@dave私は主に、名前空間に基づく例外 – gylaz
答えに示されているような共通点がある場合を除いて、いいえ –