a.ml에서 레코드 유형 t가 정의되고 a.mli에서 투명하게 으로 정의됩니다. 즉 d 인터페이스에서 형식 정의가 다른 모든 파일에 을 사용할 수 있습니다..ml 파일에서 다른 .ml 파일로 정의 된 유형에 액세스하는 방법
a.ml에는 t의 목록을 반환하는 함수 func도 있습니다. 다른 파일에서 이제
, 내가 FUNC를 호출 해요 b.ml, 지금 분명히 OCaml의 컴파일러는 컴파일러의 단지 목록을 D 목록에 저장된 개체의 D 타입, 을 추론 할 수 NT WUD. 그래서 b.ml에, 나는 "언 바운드 레코드 필드 레이블을 이름"vart의 D 타입을 추론 할 수없는 컴파일러로 의미가 선생님 컴파일러 오류가 지금 여기,
let tlist = A.func in
let vart = List.hd tlist in
printf "%s\n" vart.name (*name is a field in record t*)
을 창피 같은 근래.
첫 번째 질문 : 여기에 으로 명시 적으로 d 유형의 바트를 제공하려면 어떻게해야합니까? 나는 "vart하자 : A.t ="하자 시도했지만 같은 오류가 발생했습니다.
또한 d 목록의 첫 번째 요소를 가져오고 반환 형식을 A.t로 언급하는 다른 함수를 만들려고했지만 "Unbound value A.t"가 표시되었습니다.
let firstt = function
[] -> 0
| x :: _ -> A.t x ;;
문제 컴파일러는 b.ml 에 A.t (유형)을 인식 할 수 없습니다입니다하지만 기능 A.func을 인식 할 수있다 :이했다. b.ml에서 A.t를 제거하면 컴파일러 오류가 발생하지 않습니다.