gpt4 book ai didi

dart - 即使类型相同,也无法分配Dart函数参数

转载 作者:行者123 更新时间:2023-12-03 03:37:59 26 4
gpt4 key购买 nike

我有以下代码:

void baz(String s) {
}

void bar<T>(T val, void Function(T) encode) {
}

void foo() {
(<String>(val) => bar<String>(val, baz))("foo");
}

但是它给出了这个错误:

The argument type 'void Function(String)' can't be assigned to the parameter type 'void Function(String)'. dart(argument_type_not_assignable)



至少可以说是一个令人困惑的错误!这里发生了什么?

最佳答案

Dart类型参数有点奇怪,因为您可以使用保留的关键字和类型作为这些参数的名称。在这种情况下,<String>(val) => ...实际上在闭合上下文中使用String作为类型实参的名称,这与String中的dart:core类冲突。如果将类型参数放在foo的闭包中,则此代码应该起作用,并且val中的bar的类型仍为String。如果您想确定的话,可以在闭包中显式键入val参数:

void foo() {
((String val) => bar<String>(val, baz))("foo");
}

同样,可以忽略 bar的type参数,因为类型推断将能够推断 T类型为 String:

void foo() {
((String val) => bar(val, baz))("foo");
}

关于dart - 即使类型相同,也无法分配Dart函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59448132/

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