飞镖 - 从使用反射调用的方法获得结果

发布于 2025-02-12 18:09:51 字数 622 浏览 2 评论 0原文

我正在尝试使用DART的Mirror API动态调用功能。

在通过dowork方法通过instancemirror调用时,我如何获得从dowork方法返回的结果,

class MyData {
  String someString;
}

class MyService {
  Future<MyData> doWork() async {
    print('doing work');
    return await Future(() => MyData()..someString = 'my result');
  }
}
void main() async {
  var instance = MyService();
  var mirrror = reflect(instance);
  var result = mirrror.invoke(#doWork, []);
}

我可以看到“做工作”被打印到控制台,所以我知道它是被调用的,但是我正在努力从Invoke函数中解释结果。

I'm trying to use dart's mirror API to dynamically invoke a function.

How can I obtain the result that's returned from the doWork method when invoking it via an InstanceMirror

class MyData {
  String someString;
}

class MyService {
  Future<MyData> doWork() async {
    print('doing work');
    return await Future(() => MyData()..someString = 'my result');
  }
}
void main() async {
  var instance = MyService();
  var mirrror = reflect(instance);
  var result = mirrror.invoke(#doWork, []);
}

I can see that "doing work" gets printed to the console so I know it's being invoked, but I'm struggling to interpret the result from the invoke function.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

偷得浮生 2025-02-19 18:09:51

该值在属性Reflectee中的InstanceMirror内。这样的事情:

import 'dart:mirrors';

class MyData {
  String? someString;
}

class MyService {
  Future<MyData> doWork() async {
    print('doing work');
    return await Future(() => MyData()..someString = 'my result');
  }
}
void main() async {
  var instance = MyService();
  var mirrror = reflect(instance);
  var result = mirrror.invoke(#doWork, <dynamic>[]);
  var resultValue = await (result.reflectee as Future<MyData>);
  print(resultValue.someString); // my result
}

The value are inside the InstanceMirror in the property reflectee. So something like this:

import 'dart:mirrors';

class MyData {
  String? someString;
}

class MyService {
  Future<MyData> doWork() async {
    print('doing work');
    return await Future(() => MyData()..someString = 'my result');
  }
}
void main() async {
  var instance = MyService();
  var mirrror = reflect(instance);
  var result = mirrror.invoke(#doWork, <dynamic>[]);
  var resultValue = await (result.reflectee as Future<MyData>);
  print(resultValue.someString); // my result
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文