Dart 如何检索声明上的注释

Dart 如何检索声明上的注释,dart,dart-mirrors,Dart,Dart Mirrors,根据规范,元数据可以出现在变量声明之前 然而,它并没有说明这是否可以检索。 const注释=null; main(){ @注释 var a=“”; 打印(反射(a)为声明镜像); } 输出false 可以检索注释的这种用法吗?通过使用currentMirrorSystem()。findLibrary我可以检索库中的声明列表。通过使用新符号(“”)表示当前未命名的库,可以访问全局标识符。我还可以获得main方法,但是我无法访问main中的内部变量。所以答案是部分肯定的 但是,我想知道closu

根据规范,元数据可以出现在变量声明之前

然而,它并没有说明这是否可以检索。

const注释=null;
main(){
@注释
var a=“”;
打印(反射(a)为声明镜像);
}
输出
false


可以检索注释的这种用法吗?

通过使用
currentMirrorSystem()。findLibrary
我可以检索库中的声明列表。通过使用
新符号(“”)
表示当前未命名的库,可以访问全局标识符。我还可以获得
main
方法,但是我无法访问main中的内部变量。所以答案是部分肯定的


但是,我想知道
closuremirr
是否值得一看。

通过使用
currentMirrorSystem()。findLibrary
我可以检索库中的声明列表。通过使用
新符号(“”)
表示当前未命名的库,可以访问全局标识符。我还可以获得
main
方法,但是我无法访问main中的内部变量。所以答案是部分肯定的


但是,我想知道是否值得一看。

据我所知,当前仅支持类字段或顶级字段,但在运行时反射时不支持方法/函数内部的局部变量。
也许源镜像有更多的功能(我还没有使用它),但我认为这只能在编译时使用。

据我所知,目前只支持类的字段或顶级字段,而不支持在运行时进行反射的方法/函数内的局部变量。
也许源镜像有更多的功能(我还没有使用它),但我认为这只能在编译时使用。

对不起,anwser,但实际上,不可能实现您想要的功能。 原因很简单:代码语法正确,但未创建注释实例

例如:

类测试{
测试(字符串顶部打印){
打印(toPrint);
}
}
类注释{
最终测试;
常量注释(本测试);
}
void main(){
@注释(新测试(“注释实例”))var a=“hello”;
印刷品(a);
var annot=新注释(新测试(“本地实例”);
印刷品(a);
}
此代码将生成以下结果:

美元你好

$Local实例

美元你好

因此,从未调用过注释构造函数

可能将来会添加此功能

信息:
实际上,它在这种情况下不起作用,因为它是一个局部变量声明。对于函数、类或其他函数,它将起作用。

对于anwser很抱歉,但实际上,它不可能实现您想要的功能。 原因很简单:代码语法正确,但未创建注释实例

例如:

类测试{
测试(字符串顶部打印){
打印(toPrint);
}
}
类注释{
最终测试;
常量注释(本测试);
}
void main(){
@注释(新测试(“注释实例”))var a=“hello”;
印刷品(a);
var annot=新注释(新测试(“本地实例”);
印刷品(a);
}
此代码将生成以下结果:

美元你好

$Local实例

美元你好

因此,从未调用过注释构造函数

可能将来会添加此功能

信息: 实际上,它在这种情况下不起作用,因为它是一个局部变量声明。对于函数、类或其他函数,它将起作用。

不,这是不可能的

您需要使用镜像来检索元数据,这是正确的。说明书上说:

"Metadata can be retrieved at runtime via a reflective call, provided the annotated
 program construct p is accessible via reflection."
但是,局部变量(在函数体中声明的变量)没有镜像,因此无法通过反射访问

只能为顶级声明、类成员声明或函数参数声明(从技术上讲,是本地函数声明,但效果不太好)找到镜像。

不,这是不可能的

您需要使用镜像来检索元数据,这是正确的。说明书上说:

"Metadata can be retrieved at runtime via a reflective call, provided the annotated
 program construct p is accessible via reflection."
但是,局部变量(在函数体中声明的变量)没有镜像,因此无法通过反射访问


只能为顶级声明、类成员声明或函数参数声明(从技术上讲,是本地函数声明,但效果不太好)找到镜像。

您正在对字符串实例进行反射,因此将得到一个为真的InstanceMirror。但是为什么
var a=“”
不是一个声明呢?api文档说“一个声明镜像反映了Dart程序中声明的某个实体”,对我来说,这听起来像是可以用于库中的declaration,我对api进行了简要的查看,发现它是通过使用LibraryMirrors声明获取程序返回的。我可以肯定地说,调用reflect(a)肯定不会反映在声明上,它只是反映在字符串实例上,您希望使用reflectClass()或reflectType(),因为它们返回的是DeclarationMirrors。这是我们已经有的示例,效果很好。我只是想看看如何在不经过类成员的情况下获得
声明镜像。发布的注释没有绑定到类型,而是绑定到变量的实例,所以我想看看如何通过查看其实例的反射来找到注释。我会玩一下LibraryMirror,看看我得到了什么。你在一个字符串的实例上反射,所以你会得到一个InstanceMirror,这是真的。但是为什么
var a=“”
不是一个声明呢?api文档说“一个声明镜像反映了一个声明中声明的实体