2014-11-26 11 views
1

에 대한 사양을 작성합니다. 구체적인 유형을 지정하고 싶습니다. int를 말합니다. 형식 스펙에 함수에 주석을 달 수 있지만 구문을 알 수는 없다는 것을 알고 있습니다.나는 익명 함수를 익명 함수

이 구문에 대한 참조를 얻고 이러한 주석으로이 예제를 확장하는 것이 도움이됩니다.

감사합니다. 이 작품

답변

2

가장 일반적인 형태는 다음과 fun x -> x 이후

(fun x -> x : int -> int) 

자체에 의한 값으로, 그것은 다른 식으로, 타입으로 주석 할 수있다.

- : int -> int = <fun> 
:

(fun x -> x : int -> 'a) 

또는

(fun x -> x : 'a -> int) 

모두가 발생합니다 : 다른 컴파일러에 의해 유추 할 수 있기 때문에 실제로, 이러한 유형의 주석에서 당신은 int 년대 중 하나를 생략 할 수 있습니다

형식 주석의 'a'a의 서명과 다른 의미가 있음을 보여줍니다. 유형 주석에서 "나는 상관 없다, 당신이 결정한다"를 의미한다. 그 이유는 타입 어노테이션의 적절한 이름이 타입 제한이기 때문에, 당신은 타입으로 당신의 표현식에 주석을 달지 못하지만, 당신은 타입 유추 시스템을위한 여분의 제한을 부여합니다. 이 예제에서 여러분은 다음과 같이 말하고있는 것입니다 :이 표현식을 가지고 있고 그 타입을 추론 해주십시오. 반환 함수는 int입니다.

또한, 당신은 당신이 보통의 변수이 작업을 수행 할 수있는 입력 변수 대신 같은 방식으로 _를 사용할 수 있습니다

(fun x -> x : _ -> int) 

결과를 동일합니다.

3
# fun (x: int) -> x;; 
- : int -> int = <fun> 
# 

이유는

  • 기능 매개 변수 패턴으로 지정되어 있다는 점이다. PATTTERN위한

  • 하나의 대안의 형식이다

    : 구문 패턴 Section 6.6 of the OCaml manual 주어진다

(패턴 typexpr).