В Erlang вам предлагается не сопоставлять шаблоны, которые вы на самом деле не обрабатываете. Например:
case (anint rem 10) of
1 -> {ok, 10}
9 -> {ok, 25}
end;
- это стиль, который рекомендуется, с другими возможными результатами, приводящими к результату badmatch
. Это согласуется с философией "пусть это вредит" в Эрланге.
С другой стороны, F # выдает "неполное соответствие шаблонов" в эквивалентном коде F #, например здесь.
Вопрос: почему бы F # не удалить предупреждение, эффективно, увеличив каждый шаблон, сопоставляемый с выражением, эквивалентным
|_ -> failwith "badmatch"
и использовать философию "пусть это крушит"?
Изменить: два интересных ответа: либо избежать ошибок, которые могут возникнуть, если не обрабатывать все случаи алгебраического типа данных; или из-за платформы .Net. Один из способов узнать, что проверить OCaml. Итак, каково поведение по умолчанию в OCaml?
Изменить. Чтобы удалить недоразумения .Net, которые не имеют опыта работы в Erlang. Цель философии Эрланга - не создавать плохой код, который всегда сбой. Пусть это сбой означает пусть какой-то другой процесс исправит ошибку. Вместо того, чтобы записывать функцию так, чтобы она могла обрабатывать все возможные случаи, позвольте вызывающему (например) обращаться с плохими случаями, которые выбрасываются автоматически. Для тех, у кого есть Java-фон, это похоже на разницу между наличием языка с проверенными исключениями, который должен объявить все, что он, возможно, будет возвращать с любым возможным исключением, и иметь язык, в котором функции могут создавать исключения, которые явно не объявлены.