"failwith"不再被允许?

Sof*_*mur 2 ocaml makefile runtime compilation

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

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

今天我所有的编译.ml工作正常:.cmi,cmx并且.o都产生.但是,当我启动主要的二进制文件,它似乎并没有先运行是什么let ()main.ml,相反,它似乎检查首先列表的文件.mlmakefile,并提出Fatal error: exception Failure("to do") make: *** [all] Error 2当遇到第一个faiwith "to do".

我发现这种行为很奇怪,谁能告诉我可能是什么原因?我makefile或者有什么问题main.ml

Dan*_*zli 5

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

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

let f = failwith "TODO"
Run Code Online (Sandbox Code Playgroud)

failwith在模块初始化时执行的地方而不是:

let f x = failwith "TODO"
Run Code Online (Sandbox Code Playgroud)

其中,failwith被当函数执行f实际上是用参数来调用.

  • 奖励:如果你命名参数`_`或`_x`,你可以避免任何潜在的"未使用的变量`x`"警告. (5认同)