Ocaml-将代码作为字符串进行运行时编译



我想解析和编译我在运行时编写的函数,例如,我在运行时间生成了以下字符串:

let str = "fun x y z -> [x; y; z;]"

我正在寻找一些能让我做类似事情的东西:

let myfun = eval str 
(* eval returns the value returned by the code in the string so myfun will 
have the type: 'a -> 'a -> 'a -> 'a list*)

在OCaml中有办法做到这一点吗?我遇到了Dynlink,但我正在寻找一种更简单的方法。

没有比编译代码和Dynlinking生成的库更简单的解决方案了。

或者等效地,可以使用REPL,将字符串写入文件系统,然后用#use加载它。

根据您的确切用例,MetaOCaml可能是一个替代方案。

另一个重要的观点是,类型不能依赖于非依赖类型语言中的值。因此,CCD_ 3的类型需要受到限制。例如,在Dynlinking路径中,动态链接函数的类型将由用于注册它们的钩子的类型决定。

相关内容

  • 没有找到相关文章

最新更新