如何动态生成函数?

时间:2013-12-24 04:48:33

标签: dart

我希望能够获取一个字符串(使用正确的Dart语法)并将其转换为可调用的dart函数。有没有办法做到这一点?

例如,我会收到字符串

void test() { print("testing!"); }

然后将其转换为可调用函数。我想这样做的原因是能够从其他服务器下载dart文件并调用它们的功能。

3 个答案:

答案 0 :(得分:2)

根据飞镖常见问题解答,https://www.dartlang.org/support/faq.html#q-is-it-really-a-dynamic-language-if-it-doesnt-have-eval-or-adding-fields-to-a-value-at-run-time

Dart目前没有eval()函数,也不支持任意字符串的运行时编译,尽管它可能在将来使用。

因此,您必须在dart中创建自己的VM才能执行您想要执行的操作。

答案 1 :(得分:1)

取决于您的目标平台。如果您的目标是独立的Dart VM,那么它已经成为可能。 SDK工具Pub正在这样做。

您可以设置一个应用程序内部Web服务器,该服务器为您在gernated应用程序中嵌入的功能提供服务。您可以将应用程序加载到另一个隔离区中,并使用消息传递与该隔离区进行通信。此方法也可用于为我们的应用程序创建插件。

但是可能需要花费很多时间才能实现。如果要解析数学表达式或该语言的其他简化子部分,您可以查看可用的Pub包(parsersmath_exprerssions)。

答案 2 :(得分:0)

您目前可以做的是创建JavaScript并使用它的eval()并使用JS-interop。