2014-01-15 2 views
3

글쎄, 나쁜 제목에 대해 유감스럽게 생각합니다.F # 구문 설명 (^)

let inline getName arg = 
    (^a : (member Name : string) arg) 

나는 그것이 무엇을 알고 있지만 난 단지 때문에 그것을 붙여 복사 것을 알고 :

는 다음과 같은 기능을 고려하십시오.

그것은 말합니다 : 주어진 argname 회원의 arg 반환합니다.

그러나 첫 번째 부분은 ^a이 아니며 : (member Name : string)도 표시되지 않습니다.

내가 아는 누구나는 arg이 함수의 arg 값을 적용하고 있다는 것입니다.

답변

9

^type parameter is statically resolved을 지정하는 데 사용되며 이는 런타임에 컴파일 타임에 유형이 해석된다는 것을 의미합니다.

두 번째 부분은 이라는 멤버 (이 경우 문자열 속성)를 가진 멤버가 있어야 함을 지정하는 generic constraint입니다. 표시하는 구문은 실제로 멤버를 호출하는 방법이며 컴파일러는 함수에 대한 제네릭 제약 조건을 유추하지만 필요는 없지만 명시 적으로 제약 조건을 지정할 수도 있습니다.

let inline getName (arg : ^a when ^a : (member Name : string)) = 
    (^a : (member Name : string) arg) 
+1

'^ a : (member Name : string)'은 기본적으로'arg' 매개 변수의'Name' 멤버를 반환하는 함수입니까? – mydogisbox