короткий:
Есть ли в Ruby способ DRY-ify:
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-повысить известные-исключения обнаруживаться в обратной трассировке.
edit: Я думаю, что я хотел бы что-то вроде макроса предварительной обработки C