Ocaml utop 不但确实识别 Big_int

问题描述

我有一些使用模块 Big_int代码,例如:

open Big_int;;
Big_int.gcd_big_int 5 6;;

但是,当我用 utop dune utop --release 编译它时(我使用 release 来避免一些警告),然后我得到这个错误

Error: required module `Big_int' is unavailable

我已经阅读了它并且我已经阅读 (https://groups.google.com/g/felix-language/c/1CfHgpe9zps?pli=1) 'Big_int 不再是 OCaml 发行版的一部分。它被 Zarith' 取代。嗯,我知道,但我仍然可以使用 Big_int

我怎么知道的?关键是,如果我用没有错误的任何其他文件开始 utop,并且一旦进入我打开 Big_int,那么它不会后悔:

utop # open Big_int;;

到达那里后,它会自动完成我的 Big_int.,就像在 Big_int.add_big_int 中一样。所以有 Big_int 就在某处并且它被识别(VSCode 也会自动完成它)。

有些事情我不明白。有什么帮助吗?

解决方法

出于兼容性原因,num 库的二进制文件仍安装在编译器目录中(2021 年)。这就是你在 utop 中看到的。

但是,num 已被弃用,而支持 Zarith

如果出于某些特殊需要,您需要使用 num,则需要在将其与 dune utop 一起使用之前将其声明为项目沙丘文件中的依赖项。