【问题标题】:"failwith" is no longer allowed?不再允许“失败”?
【发布时间】:2012-01-31 09:44:02
【问题描述】:

我在makefile 中定义了要编译的.ml 列表,由main/mail.ml 完成。

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

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

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

【问题讨论】:

    标签: compilation makefile runtime ocaml


    【解决方案1】:

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

    通常问题在于,不是使 functional 值失败,而是使 non-functional 值失败,这意味着 failwith 实际上是在模块初始化期间执行。所以很可能你在代码的某个地方写了:

    let f = failwith "TODO"
    

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

    let f x = failwith "TODO"
    

    failwith 在函数 f 实际使用参数调用时被执行。

    【讨论】:

    • 奖励:如果您将参数命名为 _ 或 _x,则可以避免任何潜在的“未使用变量 x”警告。
    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2019-01-25
    • 2012-07-14
    相关资源
    最近更新 更多