没有比编译代码和
我想解析和编译我在运行时编写的函数,例如,我在运行时间生成了以下字符串:
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路径中,动态链接函数的类型将由用于注册它们的钩子的类型决定。