gpt4 book ai didi

dart - 为什么这种基本的Dart镜像用法无法正常工作

转载 作者:行者123 更新时间:2023-12-03 03:01:48 24 4
gpt4 key购买 nike

我在控制台应用程序中有以下代码:

import 'dart:mirrors';

void main() {
final foo = Foo();
final mirror = reflect(foo);
final instanceMirror = mirror.invoke(#test, []);

print(instanceMirror);
}

class Foo {
int get test {return 42;}
}

当我运行它时,我得到一个异常(exception):
Exception has occurred.
NoSuchMethodError (NoSuchMethodError: Class 'int' has no instance method 'call'.
Receiver: 42
Tried calling: call())

如果我在 test上设置一个断点,那么它将在异常发生之前被命中,因此肯定是在调用该属性。

为什么会引发异常?

更新:最终,我试图实现的是获取对象中所有属性的值。根据@mezoni的回答,似乎我需要将属性视为字段而不是方法(顺便说一下,与C#相反)。但是,尚不清楚为什么或如何枚举所有字段。我得到的最好的是:

import 'dart:mirrors';

void main() {
final foo = Foo();
final mirror = reflect(foo);

for (var k in mirror.type.instanceMembers.keys) {
final i = mirror.type.instanceMembers[k];
if (i.isGetter && i.simpleName != #hashCode && i.simpleName != #runtimeType) {
final instanceMirror = mirror.getField(i.simpleName);
print("${MirrorSystem.getName(i.simpleName)}: ${instanceMirror.reflectee}");
}
}
}

class Foo {
int get someOther {
return 42;
}

int get test {
return someOther + 13;
}
}

最佳答案

请尝试以下代码:

import 'dart:mirrors';

void main() {
final foo = Foo();
final mirror = reflect(foo);
final instanceMirror = mirror.getField(#test);

print(instanceMirror.reflectee);
}

class Foo {
int get test {
return 42;
}
}

关于dart - 为什么这种基本的Dart镜像用法无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55698765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com