gpt4 book ai didi

dart - 如何将类型传递给函数并调用其静态方法?

转载 作者:行者123 更新时间:2023-12-03 02:51:15 28 4
gpt4 key购买 nike

假设T1,T2和T3都具有我要泛泛调用的静态函数f1,f2,f3。

这样的事情怎么容易实现?

class T1 {
static f1(i) => i+1;
static f2(i) => i+1;
static f3(i) => i+1;
}

class T2 {
static f1(i) => i+2;
static f2(i) => i+2;
static f3(i) => i+2;
}

class T3 {
static f1(i) => i+3;
static f2(i) => i+3;
static f3(i) => i+3;
}

callGenerically(dynamic type) {
print(type);

type.f1(type.f2(type.f3));
}

main() {
callGenerically(T1);
callGenerically(T2);
callGenerically(T3);
}

这将打印T1,因此正在获取类型。只是不知道如何在其上调用静态函数。即使期望f1,f2,f3存在,镜像还是一个选项或要求吗?

最佳答案

为此,可以使用dart:mirrors:

reflectType(SomeClass).invoke(#someStaticMethod, []).reflectee;

现在,如果将其包装在辅助方法“ call”中,则 callGenerically可能类似于:

callGenerically(Type type, num arg) =>
call(type, #f1, [call(type, #f2, [call(type, #f3, [arg])])]);

您可以在 this DartPad中看到完整的示例。

注意
  • 这是一种反模式,最好与Dart的类型系统进行通信,以告知预期存在哪些方法。如果您知道这些类具有相同的API,请使用普通的多态性而不是反射,就像乔纳斯的回答一样。
  • 使用dart:mirrors可以防止dart2js中的摇树,从而产生肿的JS。
  • 调用f3需要一个参数,因此callGenerically中的第二个arg。
  • 关于dart - 如何将类型传递给函数并调用其静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38250011/

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