包 Batteries.Num 覆盖了函数 (+), (-), ... 所以编译器在下面的简单代码上给出了错误
open Batteries
open Num
let a = 4 + 4;;
文件“a.ml”,第 3 行,字符 8-9:错误:此表达式的类型为 int,但表达式应为 Batteries.Num.num = Num.num 类型
我用“ocamlfind ocamlc -package battery a.ml”编译。
编辑:我知道我可以使用 Pervasives.(+) 或者只是在本地打开 Num。
但是我可以使用 ocamlbuild 使用最简单的 _tags 文件成功编译该程序:<*>: pkg_batteries, package(batteries), package(num)
魔法在哪里?如何像 ocamlbuild 一样使用 Makefile 进行编译?
编辑:我找到了解决方案。我实际上有两个版本的电池(1.4 和 2.2),ocamlfind 在命令行上给出了 2.2 版本,在 ocamlbuild 上给出了 1.4。我不知道为什么。我相信早期版本的电池没有重新定义模块 Num(但您必须使用 BatNum),因此旧版本不会出现问题。感谢您的回答。