首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dart:mirrors调用顶级函数

使用dart:mirrors调用顶级函数
EN

Stack Overflow用户
提问于 2021-05-21 05:34:13
回答 1查看 30关注 0票数 0

我正在为如何在dart中调用顶级函数而苦苦挣扎。我希望能够用@Route注释函数,找到所有的Route注释,然后检查注释是否在某个方法上,然后通过它的符号调用该方法。

到目前为止,我所拥有的是:

代码语言:javascript
复制
class Route {
  final String url;
  const Route(this.url);
}

@Route('/')
void handle() {
  print('Request received');
}

void main() {
  var mirrorSystem = currentMirrorSystem();
  var lm = mirrorSystem.isolate.rootLibrary;
  for (var mirror in lm.declarations.values) {
    var metadata = mirror.metadata;
    for (var im in metadata) {
      if (im.reflectee is Route) {
        print('Route found');
        // how to invoke the function handle associated with the route annotation?
      }
    }
  }
}

从这一点上,我不确定我将如何调用该方法。如果它是一个类,那么我可以使用invoke并传入该方法的Symbol,但这不起作用,因为它不是一个类。

有人能给我一些线索吗?不幸的是,关于dart中的镜像库的信息相当稀少。

EN

回答 1

Stack Overflow用户

发布于 2021-05-21 05:59:10

我解决了这个问题。对于找到此代码的任何人,您可以使用rootLibrary上的LibraryMirror来调用顶级函数:

代码语言:javascript
复制
void main() {
  var mirrorSystem = currentMirrorSystem();
  var lm = mirrorSystem.isolate.rootLibrary;
  for (var mirror in lm.declarations.values) {
    var metadata = mirror.metadata;
    for (var im in metadata) {
      if (im.reflectee is Route && mirror is MethodMirror) {
        lm.invoke(mirror.simpleName, []);
        // prints 'Request received'
      }
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67628214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档