我正在编写一个程序,它解析用某种编写语言编写的脚本,并使用该脚本执行一些计算。该语言有一个特殊的结构,用于调用'a -> bool
类型的外部OCaml函数。所以,在语言中,我们可以有OCaml:仅从函数标识符返回函数
blah blah function (foo 45) blah blah
,我想解析器使用构造函数如
OCamlFunction of ('a -> bool) * 'a
来解析该位为价值
OCamlFunction (foo,45)
其中'foo'是用户必须在单独的.ml文件中提供并且解析器事先不知道的函数;只有定义了“foo”的OCaml文件的名称在运行时传递给解析器。所以,我需要定义一个类型为string->('a->bool)
的函数,该函数接受某个函数的名称并返回该函数。
我的问题是:
(1)我假设的代码动态加载应该使用DynLink.loadfile。这是要走的路吗? (2)如何从其标识符的知识中获取函数“foo”? (这会导致我到camlp5吗?)
听起来不错!我没有想到提供函数的实际ml文件可以在编译器/解析器中调用一个注册函数。我知道DynLink只用于加载代码。我建议DynLink加载实际功能的部分,然后您需要通过camlp5从标识符中获得。但功能注册机制实际上更简单并且很有意义。谢谢! – Surikator 2011-03-11 01:13:19