Dart虚拟机本身在'Dart:mirrors'中实现'eval',开发人员使用它。是否计划公开此方法?
下面是在Dart平台中使用此Dart虚拟机本身在'Dart:mirrors'中实现'eval',开发人员使用它。是否计划公开此方法?,dart,eval,dynamic-compilation,dart-mirrors,dart-sdk,Dart,Eval,Dynamic Compilation,Dart Mirrors,Dart Sdk,下面是在Dart平台中使用此eval方法的代码 这是通过反射完成的 \u getFieldSlow(展开){ //……跳过 var atPosition=未包装的索引('@'); 如果(atPosition==-1){ //公共符号。 f=_eval('(x)=>x.$unwrapped',空值); }否则{ //私人标志。 var withoutKey=未包装的子字符串(0,在位置); var privateKey=未包装的子字符串(atPosition); f=_eval('(x)=>x.
eval
方法的代码
这是通过反射完成的
\u getFieldSlow(展开){
//……跳过
var atPosition=未包装的索引('@');
如果(atPosition==-1){
//公共符号。
f=_eval('(x)=>x.$unwrapped',空值);
}否则{
//私人标志。
var withoutKey=未包装的子字符串(0,在位置);
var privateKey=未包装的子字符串(atPosition);
f=_eval('(x)=>x.$无钥匙,私钥);
}
//……跳过
}
static\u eval(表达式,私钥)
本机“带私钥的镜像/评估库”;
DEFINE_NATIVE_条目(使用私钥镜像\u evalinLibrary,2){
获取非空的本机参数(字符串、表达式、参数->本机参数(0));
获取本机参数(字符串、私钥、参数->本机参数(1));
const GrowtableObjectArray和库=
GrowtableObjectArray::Handle(隔离->对象存储()->libraries());
const int num_libraries=libraries.Length();
库&each_Library=Library::Handle();
Library&ctxt_Library=Library::Handle();
String&library_key=String::Handle();
if(库\u key.IsNull()){
ctxt_library=library::corebrary();
}否则{
对于(int i=0;i
V(带私钥的镜像\u评估库,2)\
附言
我在这里问这个问题是因为我不能在Dart邮件列表上问这个问题
附言
正如我们在mirrors\u impl.dart
中看到的static private method
:
static _eval(表达式,私钥)本机“镜像私钥库”;
有人希望此方法公开吗?(这不是一个问题,只是一个有声思考的问题。根据研究,像这样的纯字符串求值不太可能进入语言,即使可能会添加其他动态功能:
因此,例如,Dart不太可能支持将字符串计算为
当前上下文中的代码,但它可能支持加载该代码
动态添加到新的隔离区。Dart不太可能支持添加
字段,但它可能(通过镜像系统)支持添加
字段添加到类中,并且可以使用
noSuchMethod()。使用这些功能将有运行时成本;这是
将不使用它们的程序的成本降至最低对我们来说很重要
这一领域仍在发展中,因此我们欢迎您的想法
您需要从运行时动态性中获得什么
一般来说,这不是一个知识的问题,回答是你可以在别人面前炫耀他们的知识。不,这主要是一个好奇心的问题。对此做出创造性的反应比简单地引用信息更合适,因为信息基本上没有给出答案,但却很容易让人思考“这篇文章(FAQ)的作者最终会给所有人带来什么样的有用信息?”以及这个答案的作者。