另一个问题: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
中的函数,但我不想引入不需要的依赖项。还有其他人有同样的问题吗?人们使用什么?
答案 0 :(得分:2)
对我来说,更简单的方法是使用-g选项进行编译,然后将OCAMLRUNPARAM = b添加到环境中。 通过这种方式,您可以编写自己的vassert,并获得产生调用的整个堆栈跟踪。
当然,这是我个人工作流程的结果,我认为断言是一个不应该被最终用户看到的仅调试工具。
答案 1 :(得分:2)
有点乏味但工作正常:
assert (if not cond then print_endline "your message"; cond)