如何获取 Dart 中顶级函数的元数据
How can I get the metadata of a top-level function in Dart
import 'dart:mirrors';
const Tag = 'tag';
@Tag
void func() => print("hello");
class A {
@Tag
void func() => print("hello");
}
main() {
// top-level func
print(reflect(func).type.metadata);
//method
print(reflectClass(A).declarations[Symbol('func')].metadata.first.reflectee);
}
// output
//[]
//tag
顶级函数的元数据为空。
但是 Class 中的方法可以访问它的元数据。
有什么办法可以得到顶层函数的元数据吗?
import 'dart:mirrors';
const Tag = 'tag';
@Tag
void func() => print("hello");
class A {
@Tag
void func() => print("hello");
}
main() {
var mirrors = currentMirrorSystem();
// top-level func
var f = mirrors.isolate.rootLibrary.declarations[#func];
print(f.metadata.first.reflectee);
//method
print(reflectClass(A).declarations[Symbol('func')].metadata.first.reflectee);
// Closure on `func` has no metadate
print(reflect(func).type.metadata);
}
结果
tag
tag
[]
我刚刚找到了一种访问顶级函数元数据的新方法。
import 'dart:mirrors';
const Tag = 'tag';
@Tag
void func() => print("hello");
main() {
ClosureMirror closureMirror = reflect(func);
print(closureMirror.function.metadata.first.reflectee);
}
dart:mirrors
当然在 Flutter 中是行不通的。
import 'dart:mirrors';
const Tag = 'tag';
@Tag
void func() => print("hello");
class A {
@Tag
void func() => print("hello");
}
main() {
// top-level func
print(reflect(func).type.metadata);
//method
print(reflectClass(A).declarations[Symbol('func')].metadata.first.reflectee);
}
// output
//[]
//tag
顶级函数的元数据为空。 但是 Class 中的方法可以访问它的元数据。 有什么办法可以得到顶层函数的元数据吗?
import 'dart:mirrors';
const Tag = 'tag';
@Tag
void func() => print("hello");
class A {
@Tag
void func() => print("hello");
}
main() {
var mirrors = currentMirrorSystem();
// top-level func
var f = mirrors.isolate.rootLibrary.declarations[#func];
print(f.metadata.first.reflectee);
//method
print(reflectClass(A).declarations[Symbol('func')].metadata.first.reflectee);
// Closure on `func` has no metadate
print(reflect(func).type.metadata);
}
结果
tag
tag
[]
我刚刚找到了一种访问顶级函数元数据的新方法。
import 'dart:mirrors';
const Tag = 'tag';
@Tag
void func() => print("hello");
main() {
ClosureMirror closureMirror = reflect(func);
print(closureMirror.function.metadata.first.reflectee);
}
dart:mirrors
当然在 Flutter 中是行不通的。