2013-05-16 7 views
4

Я новичок в OCaml, и я хотел бы поместить часть кода в другой файл, скажем foo.ml, как и в C++ или Python. Но эта часть кода сама по себе не образует модуль.Как включить другие исходные файлы, используя директиву #use в OCaml?

Я включил #use "foo.ml" в начало моего основного исходного файла. Но когда я создаю свой проект, используя ocamlbuild, он сообщает I/O error: "foo.ml: No such file or directory". Но ясно, что foo.ml находится в текущем рабочем каталоге.

Интересно, знает ли кто-нибудь, как достичь этой цели в OCaml, и пусть мой проект будет построен, или если это не соглашение в OCaml? Любое предложение приветствуется.

ответ

12

#use "foo.ml" является директивой для интерактивного верхнего уровня, он не работает с компилятором.

Если вы хотите разделить свой код в разных файлах (что является хорошей идеей и настоятельно рекомендуется в OCaml), вам следует использовать систему модулей. Почему вы говорите, что ваш код не формирует модуль? Если ваш код состоит только из одноразовых функций, они должны быть в том же файле, что и функции, которые их используют. Если ваш код многократно используется, он формирует модуль.

+0

Спасибо и я должны принять вашу практику. – tfboy

3

Как уже сказал Томаш, это, вероятно, неправильное решение для вашей проблемы.

Если вам это нужно, вы должны использовать camlp4 или внешние инструменты, такие как cppo.

пример для pa_macro (поставляется с OCaml):

test2.ml:

let arg = "Hello World" 

test.ml:

INCLUDE "test2.ml" 
let() = 
    print_endline arg 

сборник:

ocamlfind ocamlc -syntax camlp4o -package camlp4 -ppopt pa_macro.cmo test.ml -o test 
+0

Спасибо. Очень интересуется camlp4. – tfboy

Смежные вопросы