如何使用元数据标记的Retrive函数 [英] How retrive function that marks with metadata
本文介绍了如何使用元数据标记的Retrive函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
查看以下代码段。
import dart:mirrors;
class meta {
final String data;
const meta(this.data);
}
@meta(Tag)
doSomething()=> print(你必须做某事);
void main(){
doSomething();
}
如何检索功能,即市场带有元数据标签?在我的例子中,我想知道,哪个方法标有元标签。
解决方案
void main(){
doSomething );
getMetaData();
}
void getMetaData(){
LibraryMirror currentLib = currentMirrorSystem()。libraries.values.last;
currentLib.declarations.forEach {
if(mirror.metadata.length> 0){
print('Symbol $ s has MetaData:$ { mirror.metadata.first.reflectee.data}');
}
});
}
这应该给你:
符号符号(doSomething)有MetaData:Tag
您还可以从另一个项目分析文件,并在该文件上使用dart:mirrors,而不是检查当前库。可能 libraries.values.last
不会总是返回当前库 - 因此您可能需要更改它。在我的情况下,它工作。
Look at the following code snippet.
import "dart:mirrors";
class meta {
final String data;
const meta(this.data);
}
@meta("Tag")
doSomething() => print("You have to do something");
void main() {
doSomething();
}
How can I retrieve functions, that is market with metadata tags? In my example, I want to find out, which method is marked with meta tags.
解决方案
you could do something like this:
void main() {
doSomething();
getMetaData();
}
void getMetaData() {
LibraryMirror currentLib = currentMirrorSystem().libraries.values.last;
currentLib.declarations.forEach((Symbol s, DeclarationMirror mirror) {
if(mirror.metadata.length > 0) {
print('Symbol $s has MetaData: "${mirror.metadata.first.reflectee.data}"');
}
});
}
This should give you:
You have to do something
Symbol Symbol("doSomething") has MetaData: "Tag"
You could also analyze your files from another project and use dart:mirrors on that file instead of inspecting the current library. Maybe libraries.values.last
will not always return the current library - so you might need to change it. In my case it worked.
这篇关于如何使用元数据标记的Retrive函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文