Functional programming Ocaml-运行时将代码编译为字符串

Functional programming Ocaml-运行时将代码编译为字符串,functional-programming,compilation,ocaml,evaluation,Functional Programming,Compilation,Ocaml,Evaluation,我想解析和编译我在运行时编写的函数,例如,我在运行时生成了以下字符串: let str=“fun x y z->[x;y;z;” 我正在寻找能让我做类似以下事情的东西: let myfun=eval str (*eval返回字符串中代码返回的值,以便myfun 具有以下类型:'a->'a->'a->'a->'a列表*) 在OCaml中有没有这样做的方法?我遇到了Dynlink,但我正在寻找一种更简单的方法。没有比编译代码和Dynlinking生成的库更简单的解决方案了 或者,可以使用REPL

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

let str=“fun x y z->[x;y;z;”
我正在寻找能让我做类似以下事情的东西:

let myfun=eval str
(*eval返回字符串中代码返回的值,以便myfun
具有以下类型:'a->'a->'a->'a->'a列表*)

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

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

或者,可以使用REPL,将字符串写入文件系统,并使用
#use
加载它

根据您的具体用例,MetaOCaml可能是一种替代方案


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

这是否回答了您的问题?不,我在要求一个更好的解决方案,但似乎没有其他办法。不,我真的不这么认为。当您将一个问题标记为重复问题时,注释会自动生成,我这样做是为了让未来的读者参考更完整的答案。[复制粘贴我认为在这里更相关的其他地方的注释:]在OCaml中,运行时编译在某些特定情况下是相关的,例如从大型应用程序加载插件,但它不是一种日常编程技术,与一些具有显著“eval”特性的语言相反(通常用于规避语言的限制)。