Используйте несколько модулей в OCaml utop

Я недавно читаю проект OCaml и хочу разместить исходные файлы в утопе, чтобы можно было поэкспериментировать.
Предположим, у меня есть два файла amodule.ml, bmodule.ml.
bmodule.ml будет использовать функции, определенные в amodule.ml, например, bmodule use Amodule.anyfunction () < / em>, где anyfunction () определено в amodule.ml.
Я хочу разместить их обоих в утопе:

#directory "/directory contain amodule.ml and bmodule.ml"
#use "amodule.ml"
#use "bmodule.ml"

И это не работает, потому что Amodule - это база имен модуля в файле amodule.ml, и я думаю, что утоп не знает этих вещей.
Итак как я могу разместить эти файлы в утопе без изменения содержимого файла?


person KUN    schedule 14.12.2013    source источник
comment
Вы пробовали cd зайти в папку, где находятся amodule.ml и bmodule.ml, а затем набрать там utop?   -  person Jackson Tale    schedule 14.12.2013
comment
Да, но все равно не работает.   -  person KUN    schedule 14.12.2013
comment
что значит не работает? можешь выложить скриншот или полные утопные тексты?   -  person Jackson Tale    schedule 14.12.2013


Ответы (1)


#use a.ml выполняет каждый оператор в a.ml так же, как если бы вы ввели эти операторы непосредственно на верхнем уровне. Таким образом, вы не определяете module A, поэтому в другом вашем файле не может быть таких вещей, как A.foo. Если вы хотите module A, вы должны сначала байтово скомпилировать a.ml, а затем #load a.cmo.

person Ashish Agarwal    schedule 14.12.2013
comment
Новые версии OCaml поддерживают #use_mod, что должно позволять это без предварительной компиляции. - person hcarty; 15.12.2013
comment
Директива, упомянутая @hcarty, на самом деле #mod_use, и это действительно очень удобно. :) - person Shon; 17.01.2017
comment
#mod_use - это именно та часть головоломки, которую мне не хватало. Спасибо @ShonFeder! Я не могу поверить, что Real World OCaml не упоминает об этом ни разу. - person Tobia; 30.07.2017
comment
Кто-нибудь хочет быстрой кармы, превратив #mod_use в правильный ответ StackOverflow? - person DomQ; 15.07.2020