如何使用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”?
答案 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完全不同,因此它可能不适合您的项目。