如何解决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 可能是替代方案。
另一个重点是类型不能依赖于非依赖类型语言中的值。因此需要限制 eval
的类型。例如,在 Dynlinking 路径中,动态链接函数的类型将由用于注册它们的钩子类型决定。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。