gpt4 book ai didi

generics - 使用带有泛型的 Dart 的 call() 方法

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

我正在尝试编写一个可以像函数一样调用的类,使用如下泛型:

typedef T FooFunction<T>(T input);

class Foo<T> {
final FooFunction fooFunction;

Converter(FooFunction<T> this.fooFunction);

T call(T input) => this.fooFunction(input);

static final Foo<String> stringFoo = new Foo<String>((String input) => input.trim());

static final Foo<int> intFoo = new Foo<int>((int input) => input * -1);
}

我试图这样称呼它:
String bar = Foo.stringFoo('  Hello World     ');
int baz = Foo.intFoo('5');

如果我删除所有类型提示,此代码可以正常工作,但是在其中有类型提示时,分析器会提示“不能将类型为 'String' 的参数分配给参数类型 'T'”和“A 的值'T' 类型不能分配给 'String' 类型的变量。”很明显,这里发生的事情是分析器看到 T输入 Foo.call 的定义并从字面上解释它,而不是在泛型类型的上下文中。

如果我将电话更改为以下内容:
String bar = Foo.stringFoo.fooFunction('  Hello World     ');
int baz = Foo.intFoo.fooFunction('5');

这样他们就不再使用 call方法,分析器了解正在发生的事情就好了。

我在声明 call 的方式上做错了吗?方法?有没有办法使用 call方法,同时保持正确的类型提示和静态分析,就好像我直接调用该方法一样?还是我做的一切都正确,我只需要向 Dart 开发人员提交错误报告?

最佳答案

它看起来像分析器中的错误。以下简单的测试不会从分析器中产生任何警告或提示(尽管执行失败):

class F<T> {
T call(T t) => t;
}

main() {
final f = new F<int>();
f('Fail');
}

虚拟机抛出以下错误:

type 'String' is not a subtype of type 'int' of 't'.



你应该 file an issue .

关于generics - 使用带有泛型的 Dart 的 call() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31243054/

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