假设我有一个 OCaml 函数
let _ = register "cbf_coh_insert" (fun k v -> print_endline ("Inserted key=" ^ k ^ " value=" ^ v))
这是一个接受两个参数的函数。在 C 端,我会用 caml_callback2(*caml_named_value("cbf_coh_insert"), k, v);
调用它。在 C 端,有没有办法检查参数的数量(在本例中为 2 个)是否匹配?除了我猜想调用它并试图捕获 SIGSEGV 之外。谢谢!
更新:some background .
最佳答案
没有围
这应该在编译时确保(手动或通过代码生成或通过解析和检查 C 和 OCaml 代码是否同步)
更新
示例寄存器函数:
let on_cbf_coh_insert (f : string -> string -> unit) = register "cbf_coh_insert" f
更新
I wish it was possible to pass a closure/let binding straight into C.
为什么你认为这是不可能的?查看一直执行此操作的现有绑定(bind)。
顺便说一句,这个问题是XY problem 的完美例证。 .
关于从 C 检查 OCaml 类型签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6982849/