如何在Dart中从String创建闭包?

时间:2013-11-16 02:53:08

标签: reflection closures dart dart-mirrors

如何使用dart-mirror API动态创建匿名闭包?

与解释器一样,在运行时编译代码。

var funcstr='bool (String s){ return (s==null); }';
var func=parseStr(funcstr);
// func(s)-> s==null;
var r=func('false');
// r=false;

那么,如何处理“parseStr”?

我的项目: http://github.com/stevehsu77/surebet

2 个答案:

答案 0 :(得分:2)

目前无法做到这一点。 Dart没有eval,并且在运行时没有代码生成。

但是Gilad Bracha(Dart的语言规范领导者)希望至少在开发环境中拥有(https://groups.google.com/a/dartlang.org/forum/#!topic/misc/6O4g7eEHgOU)。

另外

  

我们希望将来支持更强大的反光功能。这些包括镜像构建器,旨在允许程序自己扩展和修改,以及基于镜像的调试API。

https://www.dartlang.org/articles/reflection-with-mirrors/

所以它可能在将来的某个时候得到支持。但是现在这是不可能的。

答案 1 :(得分:1)

如上所述,Dart没有eval,但是可以使用spawnUri()在另一个隔离中加载新的源代码。

我不确定是否有任何如何使用它的例子。也许在飞镖discussion group上发布消息。

使用隔离区和spawnUri()与使用eval完全不同,因此它可能不适合您的项目。