Как использовать модуль и скрипт в терминале команды ocaml? - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь запустить сценарий .ml, test.ml, используя команду ocaml и использовать модуль template.ml, который я настроил.

В настоящее время я знаю, что могу запустите ocaml, используя модуль, выполнив ocaml -init template.ml, и я могу запустить скрипт, используя ocaml test.ml.
Я пытаюсь запустить скрипт test.ml и использовать модуль template.ml.

Я пытался использовать ocaml test.ml с первой строкой open Template ;; после компиляции шаблона с ocamlopt -c template.ml. В этом случае шаблон не определен.
Я также пытался использовать ocaml -init template.ml test.ml с * 1016 и без * в качестве первой строки кода. Они не работают или ошибки соответственно.

1 Ответ

2 голосов
/ 04 апреля 2020

Во-первых, команда open предназначена только для управления пространством имен. Т.е. он управляет набором видимых имен. Он не имеет эффекта (как это часто предполагается), когда обнаруживает и делает модуль доступным. (Как правило, вам следует избегать чрезмерного использования open. В этом нет необходимости; вы всегда можете использовать полный синтаксис Module.name.)

В командной строке ocaml берется любое количество скомпилированных модулей ocaml, за которым следует один файл ocaml (.ml).

Таким образом, вы можете сделать то, что вы хотите, скомпилировав файл template.ml перед началом:

$ ocamlc -c template.ml
$ ocaml template.cmo test.ml

Вот полностью проработанный пример с минимальным содержанием файлов:

$ cat template.ml
let f x = x + 5
$ cat test.ml
let main () = Printf.printf "%d\n" (Template.f 14)

let () = main ()
$ ocamlc -c template.ml
$ ocaml template.cmo test.ml
19

Для чего стоит думать об OCaml как о скомпилированном языке, а не как языке сценариев. Поэтому я обычно собираю все файлы и запускаю их. Используя те же файлы, что и выше, это выглядит следующим образом:

$ ocamlc -o test template.ml test.ml
$ ./test
19

Я использую команду ocaml только тогда, когда хочу взаимодействовать с интерпретатором (который люди из OCaml традиционно называли «верхним уровнем») .

$ ocaml
        OCaml version 4.10.0

# let f x = x + 5;;
val f : int -> int = <fun>
# f 14;;
- : int = 19
#
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...