2009-06-04 4 views
1

hubfs의 this 포럼 게시물과 비슷한 오류가 발생하여 문제가 해결되었지만 해당 스레드의 코드에 대한 질문이 생깁니다.F # 매개 변수 제약 조건이있는 함수

 
let test x = printfn "n" 
let finall x = x : 'a -> unit 
let i x = finall test x 

어떤 사람이 내게 2 행이 무엇이라고 설명 할 수 있습니까? 내가 finall의 종류 그래서

finall: ('a -> unit) -> ('a -> unit)

기능에 취하고 그 함수를 반환은 단지 기능입니다 것을 알 수있다. 2 번과 3 번 줄을 쓰는 이유는 무엇입니까? 나중에 함수 본문을 finall으로 정의 할 수 있습니까? 3 번째 줄에서 통화를 괄호로 묶을 필요가없는 것으로 보입니다. 2 번 줄의 결과입니까?

답변

3

그래, 그 스레드의 코드는별로 의미가 없습니다. 'finall'은 근본적으로 인수가 임의의 값이 아닌 함수 반환 단위가되도록 제약한다는 점을 제외하고는 신원 함수 (id x = x라고합시다)입니다. 기본적으로는 그냥 쉽게 나는이 조각은 어쩌면 그들이 이해하지 못했다 오류 메시지와 함께 시작 사람으로부터오고, 그것을 아래로 제거하려고 것으로 기대

let test x = printfn "n" 
let i x = test x 

쓸 수있는 유용한 아무것도하지 않습니다 작은 샘플 repro.

f x 

통화, 그리고 기능의 응용 프로그램이

을 의미 태닝을 지원하는 일반적인 방법, 작동합니다

(함수 호출에 관해서는, 당신은 F #에서 보자 바인딩 함수를 호출하기 위해 괄호를 필요가 없습니다

f x y 

(f x) y 

'하면 마지막 테스트 X'LIN에 무슨 일이 일어나고있는 수단 e)

+0

고마워요, 내가 찾고 있었던 것이 었습니다! – Jake

관련 문제