Если вы хотите запускать свой код таким образом, вы ограничены тем фактом, что команда ocaml
ожидает любое количество предварительно скомпилированных файлов OCaml (файлов байт-кода) и один файл .ml
. Если вы указываете несколько файлов .ml
, он игнорирует все, кроме первого.
Причина наблюдаемого вами поведения заключается в том, что ваша командная строка запрашивает ocaml
запуск файла как программы. Другими словами, он выполнит весь код верхнего уровня в первом файле .ml
(игнорируя остальные), а затем завершит работу. Я предполагаю, что у вас нет кода верхнего уровня, который дает видимый результат в вашем файле module1.ml
.
Вы можете заставить это работать (или, по крайней мере, улучшить ситуацию), скомпилировав все файлы, кроме одного, используя ocamlc
:
$ ocamlc -c section1/module2.ml
$ ocamlc -c section2/module3.ml
$ ocaml section1/module2.cmo section1/module3.cmo module1.ml
Вы также можете загружать файлы на верхний уровень после его запуска:
$ ocaml
OCaml version 4.10.0
# #use "section1/module2.ml";;
# #use "section1/module3.ml";;
# #use "module1.ml";;
#
Это то, что я обычно делаю, чтобы интерактивно экспериментировать со своим кодом.
С другой стороны, если я просто хочу запустить код, я компилирую все файлы, а затем просто запускаю результат:
$ ocamlc -o myprogram section1/module2.ml section1/module3.ml module1.ml
$ ./myprogram
person
Jeffrey Scofield
schedule
22.04.2020