Compilation “failwith”不再被允许?

Compilation “failwith”不再被允许?,compilation,makefile,runtime,ocaml,Compilation,Makefile,Runtime,Ocaml,我在makefile中定义了一个要编译的.ml列表,由main/mail.ml完成 作为这些文件中的一些函数的主体,我有一些失败要做。以前,我记得只有当运行时执行需要该函数时,它才会引发错误 今天,所有my.ml的编译工作正常:.cmi、cmx和.o都已生成。但当我启动主二进制文件时,它似乎并没有首先运行main.ml的let中的内容,相反,它似乎首先检查makefile中list.ml的所有文件,并引发致命错误:异常Failureto do make:**[all]错误2,当它遇到第一个fai

我在makefile中定义了一个要编译的.ml列表,由main/mail.ml完成

作为这些文件中的一些函数的主体,我有一些失败要做。以前,我记得只有当运行时执行需要该函数时,它才会引发错误

今天,所有my.ml的编译工作正常:.cmi、cmx和.o都已生成。但当我启动主二进制文件时,它似乎并没有首先运行main.ml的let中的内容,相反,它似乎首先检查makefile中list.ml的所有文件,并引发致命错误:异常Failureto do make:**[all]错误2,当它遇到第一个faiwith to do时

我觉得这种行为很奇怪,有人能告诉我原因吗?我的makefile或main.ml中有问题?

仍然允许failwith!但这有时也发生在我身上

通常问题是,不是使功能值失败,而是使非功能值失败,这意味着failwith实际上是在模块初始化期间执行的。因此,您可能在代码的某个地方编写了:

let f = failwith "TODO"
其中,在模块初始化时执行failwith,而不是:


其中failwith在函数f实际被参数调用时执行

好处:如果将参数命名为u或x,则可以避免任何潜在的未使用变量x警告。
let f x = failwith "TODO"