简述:
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
但这会导致方法“重新抛出已知异常”在回溯中显示。
编辑:我想要的东西可能类似于C预处理宏。