如何将多个 OCaml 文件加载到顶层?
How to load multiple OCaml files into toplevel?
我正在尝试调试我制作的程序。这是我的目录结构:
src
|- module1.ml
|- section1
|- module2.ml
|- module3.ml
module1.ml 被 module2.ml 和 module3.ml 引用。 module2.ml 被 module3.ml 引用。
我尝试使用命令将文件加载到顶层
ocaml -I section1 module1.ml section1/module2.ml section1/module3.ml
但它不起作用。它甚至不会调出顶层或打印错误。它什么也没做,我回到了我从 Bash 提示开始的地方。
如果您想以这种方式 运行 您的代码,您会受到以下事实的限制 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
除了你已经给出的答案之外,如果你想从顶层加载模块而不编译模块,你可以使用 #mod_use
指令,添加我相信 ocaml-4.01。它的行为方式与 #use 指令类似,不同之处在于您的代码看起来就像是一个已编译的模块(因此文件名成为初始模块名称)。
见http://caml.inria.fr/pub/docs/manual-ocaml/toplevel.html#s%3Atoplevel-directives
我正在尝试调试我制作的程序。这是我的目录结构:
src
|- module1.ml
|- section1
|- module2.ml
|- module3.ml
module1.ml 被 module2.ml 和 module3.ml 引用。 module2.ml 被 module3.ml 引用。
我尝试使用命令将文件加载到顶层
ocaml -I section1 module1.ml section1/module2.ml section1/module3.ml
但它不起作用。它甚至不会调出顶层或打印错误。它什么也没做,我回到了我从 Bash 提示开始的地方。
如果您想以这种方式 运行 您的代码,您会受到以下事实的限制 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
除了你已经给出的答案之外,如果你想从顶层加载模块而不编译模块,你可以使用 #mod_use
指令,添加我相信 ocaml-4.01。它的行为方式与 #use 指令类似,不同之处在于您的代码看起来就像是一个已编译的模块(因此文件名成为初始模块名称)。
见http://caml.inria.fr/pub/docs/manual-ocaml/toplevel.html#s%3Atoplevel-directives