так ну тут уже вопрос к практикам. на мой взгляд есть очень мало причин обрабатывать ошибки в функциях, где они происходят
Тут принято, что exceptions should be exceptional.
мутно как то, принято кидать не принято ловить. еще и два сорта выбрасываний.
Тот сорт, который именно выбрасывания, — это не исключения, а способ преждевременного возврата, по-идее. Т.е. такой же способ управлять потоком вычисления, как иксепшоны в мейнстримных языках.
Хз, это одна из вещей которая просто повергла в шок. Какие могут быть оправдания для введения третьего потока исполнения?
throw полезен когда например глубоко в Stream.unfold ты понимаешь, что можно не продолжать, но unfold в любом случае возвращает стрим, который тебе потом придется проверять на ошибки. А так можно кинуть, поймать и вернуть {:error, ...} вместо стрима
Если быть точным, то четыре: - raise - throw - exit :erlang.error
судя по сурсам raise это и есть :erlang.error
я имел в виду с точки зрения языка и чего то что можно засунуть в прикладной код по незнанию. то что throw должно быть каким то крайним средством оптимизации а raise унифицированным способом структурировать ошибки в теории понятно...
я ведь правильно понимаю что catch с правильным паттерном позволяет поймать их все?
Нет, в эликсире catch для throw
не совсем catch :exit|:error|:throw, val ->
Не знал что такой есть, хым
catch x -> => catch :throw, x -> rescue x -> => catch :error, x -> получается?
Обсуждают сегодня