短い:
RubyでこれをDRY化する方法はありますか:
def entry_point_one
begin
do_something
rescue MySyntaxErrorOne, MySyntaxErrorTwo, MySyntaxErrorEtc => syn_err
raise syn_err.exception(syn_err.message)
end
end
def entry_point_two
begin
do_something_else
rescue MySyntaxErrorOne, MySyntaxErrorTwo, MySyntaxErrorEtc => syn_err
raise syn_err.exception(syn_err.message)
end
end
より長いです:
私は通訳を構築しています。このインタープリターは、さまざまなエントリ ポイントを使用して呼び出すことができます。このインタープリターに「汚い」文字列をフィードすると、エラーが発生することが予想されます。ただし、do_something によって直接または間接的に呼び出されるすべてのメソッドのバック トレース全体によって、特にインタープリターが再帰を使用するため、スパムにならないようにするとよいでしょう。
上記のスニペットでわかるように、エラーを再発生させてバック トレースを削除する方法を既に知っています。私がしたいのは、上記の例の重複を削除することです。私がこれまでに最も近いのはこれです:
def entry_point_one
re_raise_known_exceptions {do_something}
end
def entry_point_two
re_raise_known_exceptions {do_something_else}
end
def re_raise_known_exceptions
yield
rescue MySyntaxErrorOne, MySyntaxErrorTwo, MySyntaxErrorEtc => syn_err
raise syn_err.exception(syn_err.message)
end
しかし、これにより re-raise-known-exceptions メソッドがバック トレースに表示されます。
編集:私が欲しいのは、Cの前処理マクロのようなものだと思います