2012-01-31 75 views
2

我有一个列表.ml编译定义在我的makefile,完成main/mail.ml“failwith”不再被允许?

我有一些failwith "to do"作为这些文件中的一些功能的主体。之前,我记得只有当运行时执行需要该函数时才会产生错误。

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

我觉得这种行为很奇怪,有谁能告诉我可能是什么原因?我的makefilemain.ml有问题吗?

回答

5

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

一般问题是,而不是使一个官能值失败,你是一个非功能值失败,这意味着,failwith是在模块的初始化期间执行的事实。所以,很可能在你的代码的某个地方,你写道:

let f = failwith "TODO" 

其中failwith得到在模块初始化的代替执行:

let f x = failwith "TODO" 

在当功能f实际上是一个名为failwith被执行一个论点。

+5

奖励:如果您命名参数'_'或'_x',则避免了任何潜在的“未使用的变量'x'”警告。 – gasche 2012-01-31 13:39:53