겉으로는 사소한 문제가 있습니다. 포인트가없는 방식으로 작성된 함수에서 예외를 처리 할 수 없습니다. 두 기능은 겉으로는 동일하지만 서로 다른 유형이,포인트가없는 함수에서의 예외 처리
let divide1 x y =
try
x/y
with
| :? System.DivideByZeroException -> 42
let divide2 =
try
(/)
with
| :? System.DivideByZeroException -> fun _ _ -> 42
let x1 = divide1 5 0 // works fine
let x2 = divide2 5 0 // doesn't handle an exception
:
이 두 기능을 고려val divide1: int -> int -> int
val divide2: (int -> int -> int)
물론, divide2
도 예외를 처리하지 않습니다. 단순히 연산자를 반환합니다.
divide2
이 적절한 방법으로 예외를 처리하도록하려면 어떻게해야합니까? (특히 인수를 선언하는 것을 제외하고)?
글쎄, 이것은 예상된다. 함수를 반환하고 성공하려고 시도합니다. 나중에이 함수를 호출 할 때 예외가 발생합니다. F # 커뮤니티가 point-free 이상이라고 생각 했나요? ;) –
@ 로버트 : 나는 그 마지막 문장까지 너와 함께했다. ;-( – ildjarn
@ildjarn : 이유는 무엇입니까? point-free 문자는 더 적습니다. 그러나 point-free가 가독성을 떨어 뜨리지 않는 단일 사례를 보지 못했을 것입니다 .F #에서 우리가 intellisense에 의존하는 추가 마이너스 그리고 매개 변수 이름이 손실됩니다. –