2017-03-25 11 views
1

간략하게하겠습니다. 나는 현재 내가 따르고있는 코스에 OCaml을 배우고 Linux에서 VS 코드를 사용하여 설치를 위해 intellisense를 사용하려고 노력 중이다. 이를 위해서는 파일을 먼저 만들어야합니다. 문제는 "spellc.ml"파일을 빌드하려고 할 때 언 바운드 값이 있다는 오류가 발생합니다.ocamlbuild 오류 언 바운드 값

_build/ 
    src/ 
    ... 
src/ 
    spellc.ml 
    utiles.ml 
    ... 
.merlin 

SRC/spellc.ml :

는이 같은 디렉토리 구조가

module Spellc = struct 
    open Utiles 
    [...] 

    let someFunc x = 
     [...] 
     let foo = List.map case lst in 

    [...] 
end 

SRC를/utiles.ml :

module Utiles = struct 
    [...] 

    let case x = 
     [...] 

    [...] 
end 

.merlin :

S src 
B _build/src 

"Open Utiles"와 같은 공개 문을 사용하여 내가 이해할 수있는 것 (그리고 여기에 나와 함께 맨손으로, 나는 ocaml 프로젝트를 컴파일하는 데 전혀 경험이 없습니다)에서 현재 "Utiles"모듈에 포함 된 모든 표현식과 함수를 포함해야합니다 컨텍스트를 사용하여 직접 사용할 수 있으므로 사례를 사용하면 Utiles를 수행하는 것처럼 보일 수 있습니다. 사례. 그러나 내가 터미널에서 ocamlbuild 사용하여 컴파일 할 때 작동하지 않습니다

ocamlbuild -tag bin_annot src/spellc.byte 

나는이 오류를 얻을 : 나는 그것의 모듈 접두어 기능을 사용할 때

Error: Unbound value case 

이 발생하지 않습니다 (Utiles.case). 열려있는 성명서로 컴파일 작업을하는 쉬운 방법이 있다면 누구나 말해 줄 수 있습니까?

+1

'utiles.ml'의 최상위 레벨에'utcase = struct ... end' 모듈이 아니라'let case x = ...'를 넣으십시오. 'utiles.ml' 파일 자체는'Utiles' 모듈을 정의합니다 : https://ocaml.org/learn/tutorials/modules.html – dkim

+0

답을 고맙게 생각합니다! 나는 실제로 당신의 코멘트를 읽기 전에 이것을 발견했다. 우리의 파일은 선생님에 의해 주로 이렇게 올려 져서 ocaml 해석기에 붙여 넣을 수 있고 모듈을 사용할 수 있습니다. 나는 컴파일러가 .ml 파일을 모듈로 인식한다는 것을 몰랐다. –

답변

0

dkim 덕분에 드디어 내 문제에 대한 해결책을 찾았습니다. 내가 이해할 수 없었던 것은 OCaml 파일을 컴파일 할 때 utiles.ml이라는 파일이 이미 Utiles라는 모듈을 정의했기 때문에 .ml 파일 내부에 추가 선언 모듈 Utiles를 추가 할 필요가 없다는 것입니다.