“failwith”不再被允许?

时间:2012-01-31 09:44:02

标签: compilation makefile runtime ocaml

我有一个.ml的列表,在我的makefile中定义,由main/mail.ml完成。

我在这些文件中有一些failwith "to do"作为一些函数的主体。之前,我记得它只在运行时执行需要该函数时引发错误。

今天我所有.ml的编辑工作正常:.cmicmx.o都已生成。但是,当我启动主二进制文件时,它似乎不会首先运行let () main.ml中的.ml,而是,它似乎首先检查列表makefile中的所有文件Fatal error: exception Failure("to do") make: *** [all] Error 2,并在遇到第一个faiwith "to do"时提出makefile

我发现这种行为很奇怪,谁能告诉我可能是什么原因?我的main.ml或{{1}}?

出了问题

1 个答案:

答案 0 :(得分:5)

仍然允许

failwith!但这有时也会发生在我身上。

通常问题是,不是让功能值失败,而是使非功能性值失败,这意味着failwith是实际上在模块初始化期间执行。所以很可能你的代码中的某处写了:

let f = failwith "TODO"

其中failwith在模块初始化时执行而不是

let f x = failwith "TODO"

当使用参数实际调用函数failwith时执行f