如何在 utop 中重新加载 OCaml 模块
Posted
技术标签:
【中文标题】如何在 utop 中重新加载 OCaml 模块【英文标题】:how to reload OCaml modules in utop 【发布时间】:2018-02-12 09:11:15 【问题描述】:是否可以在 OCaml 的 utop 中重新加载模块?
在使用 OCaml 代码时,我的开发工作流程是这样的:
首先,在 Vim 中打开一个文件 example.ml
并破解它。切换到另一个终端并运行utop
。从utop
中,使用指令#use "example.ml";;
加载代码。
回到 Vim 并修改代码。更改代码后,我想尝试新的更改。返回utop
并重新运行指令#use "example.ml"
。
如果有一个#reload
指令可以重新加载所有以前加载的模块,那就太好了,但似乎没有。 有没有办法轻松地重新加载所有以前加载的模块?
理想情况下,这将类似于 GHCi 的 :reload
命令。
【问题讨论】:
假设模块在两次运行之间没有变化。是否可以将目标文件传递给 utop?例如,您有一个文件 tree.ml 编译为 tree.cma(或 tree.cmo),您可以使用命令行“utop tree.cma”加载树模块。如果是这样,您只需要使用正确的选项重新启动 utop。默认情况下,它在 emacs 中可能效果不佳。 在来自#use "topfind";;
的问候消息中,它说:... Topfind.reset();; to force that packages will be reloaded ...
你可以把你所有的#use
s 放在一个.ml
文件和#use
中,每次你想重新加载其中的所有内容时
【参考方案1】:
在问这个问题的时候,我相信dune 还没有将自己确立为 OCaml 的 构建系统。使用沙丘,您可以简单地启动一个加载了本地定义库的 utop 实例(如 here 所述),方法是:
$ dune utop <dir> -- <args>
<dir>
是一个目录,dune 将在该目录下搜索(递归) 对于将要加载的所有库
【讨论】:
以上是关于如何在 utop 中重新加载 OCaml 模块的主要内容,如果未能解决你的问题,请参考以下文章