얼랑 (Erlang)에서는 실제로 다루지 않는 패턴과 일치하지 않는 것이 좋습니다. 예를 들어 :패턴 매칭, F # vs Erlang
case (anint rem 10) of
1 -> {ok, 10}
9 -> {ok, 25}
end;
는 badmatch
결과의 결과로 다른 가능한 결과를 장려하는 스타일입니다. 이는 얼랑 (Erlang)의 "추락 시키자"철학과 일치합니다.
한편 F #은 here과 같은 F # 코드에서 "불완전한 패턴 일치"를 발행합니다.
질문 : 왜 F하지 #이
|_ -> failwith "badmatch"
하고 "이 충돌하자"철학을 사용하는 것과 성명과 일치하는 모든 패턴을 보강하여 효과적으로 경고를 제거 할 것인가?
편집 : 두 가지 흥미로운 해답은 지금까지 : 대수 데이터 유형의 모든 경우를 처리하지 않을 때 발생할 수있는 버그를 방지하거나, 또는 .Net 플랫폼 때문에. OCaml을 확인하는 방법 중 하나를 찾으려면. 그렇다면 OCaml의 기본 동작은 무엇입니까?
편집 : Erlang을 배경으로하지 않는 .Net 사람들이 오해를 제거하십시오. Erlang 철학의 요점은 항상 충돌하는 나쁜 코드를 생성하는 것이 아니라는 것입니다. 그것을 깨뜨리게하자. let some other process fix the error. 가능한 모든 경우를 처리 할 수 있도록 함수를 작성하는 대신 호출자가 자동으로 throw되는 불량 사례를 처리하도록합니다. 자바를 사용하는 사람들은 가능한 예외가 발생할 때마다 반환 할 모든 것을 선언해야하고, 함수가 명시 적으로 선언되지 않은 예외를 발생시킬 수있는 언어를 가져야하는 확인 된 예외가있는 언어와 다른 점이 있습니다.
필자는이 기능이 사용자의 함수가 예상되는 전체 도메인을 처리해야한다는 철학이라고 생각하며 컴파일러가이 점을 상기시킵니다. 함수가 2보다 많은 경우를 처리하지 못하면 형식에 따라 인수를 제한해야하며, 그렇지 않으면 모두 인수를 사용해야합니다. 그것이 내 이해입니다. 나는이 철학에 대해 스스로 배우고있다. – grettke
@ grettke : 정확합니다. 이 철학은 얼랑 철학과 정반대입니다. 그리고 제 질문은 왜이 철학이 선호되는지입니다. 아래 답변은 아주 밝게 빛납니다. –