У меня есть простой код, подобный приведенному ниже, чтобы проверить, как Эрланг обрабатывает исключения.Ссылка **** для throw и catch.
-module(exception).
-export([sum/2]).
-export([is_odd/1]).
sum(A, B) ->
case is_odd(A) of
odd ->
2*A+B;
Result ->
Result
end.
is_odd(A) ->
case is_integer(A) of
true ->
odd;
_ -> ****({error, "Input error"})
end.
Когда я запускаю диализатор с throw, отображается предупреждение:
exception.erl: 9: переменная Result можетникогда не совпадать, так как предыдущие пункты полностью покрывали тип 'odd'
Это предупреждение можно исправить, добавив
case catch
для функциивесело / 2.
Когда я запустил диализатор с защелкой, диализатор прошел успешно.
Интересно немного о ловле и броске.Какую ситуацию мы должны бросить или поймать?