ocaml - 如何在 OCaml 中打印调用函数的文件位置?

标签 ocaml

我正在尝试制作一个功能更强大的自定义断言函数,除了问题是断言异常指向自定义断言函数内部,这对最终用户在试图找出哪个断言时没有用断言失败。

这是我目前所拥有的:

  let assert_eq (exp: 'a) (exp2: 'a) = 
    assert (exp = exp2)

最佳答案

OCaml 没有函数接口(interface)来确定其调用站点的详细信息。内置断言机制之所以可能是因为:它是一种内置机制,而不是普通的函数调用。

有一种方法可以确定当前函数、文件名、行号和模块。在 Stdlib 的文档中(在名为“调试”的部分中),您会找到 __FUNCTION___FILE____LINE____MODULE__。还有一些类似的名称可以捕获各种组合。 Stdlib 的文档在这里:https://v2.ocaml.org/releases/4.14/api/Stdlib.html

要创建一个可以从调用站点访问这些值的断言函数,我很确定您需要创建一个语法扩展来传递它们。目前最受青睐的机制是 PPX。我能找到的关于 PPX 的最好的一般描述在这里:https://ocaml-ppx.github.io/ppxlib/ppxlib/manual.html#what-is-ppx

总而言之,我认为这是一个需要 OCaml 高级功能的项目。

关于ocaml - 如何在 OCaml 中打印调用函数的文件位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73860764/

相关文章:

OCaml 的 MongoDB 客户端

csv - Ocaml CSV 到 float 列表

types - Coq 到 OCaml 的代数类型提取

javascript - OCaml 相当于 javascript 'apply'

haskell - OCaml 中的 ghci 类型指令的等价物是什么?

haskell - 是否有一个单子(monad)的术语也是一个共单子(monad)?

OCaml:如何一起使用电池和 ppx_deriving.*?

OCaml + Menhir : How to parse OCaml like tuple-pattern?

find - 如何访问 OCaml 中的列表

ocaml - 基本 Ocaml : How do I compile this?