我有一个要编译的 .ml
列表,在我的 makefile
中定义,由 main/mail.ml
完成。
我有一些failwith“to do”
作为这些文件中某些函数的主体。之前,我记得只有当运行时执行需要该函数时才会引发错误。
今天,我所有 .ml
的编译工作正常:.cmi
、cmx
和 .o
是全部生成。但是当我启动主二进制文件时,它似乎并没有首先运行 main.ml
的 let ()
中的内容,相反,它似乎首先检查所有makefile
中列表 .ml
的文件,并引发 fatal error :异常 Failure("to do") make: *** [all] Error 2
当它遇到第一个faiwith“to do”
时。
我发现这种行为很奇怪,有人能告诉我这可能是什么原因吗?我的 makefile
或 main.ml
有问题吗?
最佳答案
failwith
还是允许的!但这种情况有时也会发生在我身上。
通常问题是,您不是使功能值失败,而是使非功能值失败,这意味着failwith
实际上是在模块初始化期间执行的。因此,您可能在代码中的某个地方编写了:
let f = failwith "TODO"
哪里failwith
在模块初始化时执行而不是:
let f x = failwith "TODO"
哪里failwith
当函数 f
时执行实际上是带有参数调用的。
关于compilation - "failwith"不再被允许?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9077305/