Я пишу службу REST в Erlang, и мне нужно проверить полученные данные, прежде чем передавать их другим внутренним функциям для дальнейшей обработки; для этого я m в настоящее время использует вложенные выражения case
вроде этого:
case all_args_defined(Args) of
true ->
ActionSuccess = action(Args),
case ActionSuccess of
{ok, _} -> ...;
{fail, reason} -> {fail, reason}
end,
_ ->
{fail, "args not defined"}
end,
...
Я понимаю, что это некрасиво, но таким образом я могу предоставить подробные сообщения об ошибках. Кроме того, я не думаю, что обычный делает это Здесь применима философия сбоя - я не хочу, чтобы моя служба REST аварийно завершала работу и перезапускалась каждый раз, когда кто-то бросает ей недопустимые аргументы.
Однако я рассматриваю g отказавшись от всех этих случаев
в пользу зонтичного try / catch
блока, улавливающего любые плохие совпадения
ошибки - это сработает?
fun() ->
true = all_args_defined(Args),
{ok, _} = action(Args).
%% somewhere else
catch fun().