OCaml:断言与消息

时间:2014-03-21 14:28:20

标签: ocaml

另一个问题:P我不太确定我是应该在这里发布还是在OCaml邮件列表上发布,但我先尝试过。

我喜欢断言。但是,我发现错误消息在没有附加消息的情况下接近无用(第XXX行的断言违规 - 很好,但实际上出了什么问题?)。 我认为断言的一个好例子是pythonic assert x > 0, "X must be greater than zero for the algorithm X to work",一个坏例子是类C assert(x>0)

我很失望地得知在OCaml =中无法将错误消息附加到断言中( 我的选择是:

  • 编写自定义函数,例如vassert =>但我不会得到只有assert关键字
  • 才能使用的魔术行号
  • 使用failwith,但它更加冗长,我认为与自定义函数存在同样的问题。
  • 使用OUnit中的函数,但我不想引入不需要的依赖项。

还有其他人有同样的问题吗?人们使用什么?

2 个答案:

答案 0 :(得分:2)

对我来说,更简单的方法是使用-g选项进行编译,然后将OCAMLRUNPARAM = b添加到环境中。 通过这种方式,您可以编写自己的vassert,并获得产生调用的整个堆栈跟踪。

当然,这是我个人工作流程的结果,我认为断言是一个不应该被最终用户看到的仅调试工具。

答案 1 :(得分:2)

有点乏味但工作正常:

 assert (if not cond then print_endline "your message"; cond)