我有一个.ml
的列表,在我的makefile
中定义,由main/mail.ml
完成。
我在这些文件中有一些failwith "to do"
作为一些函数的主体。之前,我记得它只在运行时执行需要该函数时引发错误。
今天我所有.ml
的编辑工作正常:.cmi
,cmx
和.o
都已生成。但是,当我启动主二进制文件时,它似乎不会首先运行let ()
main.ml
中的.ml
,而是,它似乎首先检查列表makefile
中的所有文件Fatal error: exception Failure("to do") make: *** [all] Error 2
,并在遇到第一个faiwith "to do"
时提出makefile
。
我发现这种行为很奇怪,谁能告诉我可能是什么原因?我的main.ml
或{{1}}?
答案 0 :(得分:5)
failwith
!但这有时也会发生在我身上。
通常问题是,不是让功能值失败,而是使非功能性值失败,这意味着failwith
是实际上在模块初始化期间执行。所以很可能你的代码中的某处写了:
let f = failwith "TODO"
其中failwith
在模块初始化时执行而不是:
let f x = failwith "TODO"
当使用参数实际调用函数failwith
时执行f
。