【问题标题】:Dart function argument can't be assigned even though it is the same type即使是同一类型,也无法分配 Dart 函数参数
【发布时间】:2020-04-14 07:38:01
【问题描述】:

我有这个代码:

void baz(String s) {
}

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

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

但是它给出了这个错误:

参数类型“void Function(String)”不能分配给参数类型“void Function(String)”。 飞镖(argument_type_not_assignable)

至少可以说是一个令人困惑的错误!这是怎么回事?

【问题讨论】:

    标签: dart


    【解决方案1】:

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

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

    另外,bar 的类型参数可以省略,因为类型推断将能够推断出T 的类型是String

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

    【讨论】:

      猜你喜欢
      • 2021-09-30
      • 2020-04-15
      • 1970-01-01
      • 2020-05-15
      • 2021-07-20
      • 2021-07-17
      • 2021-09-15
      • 2019-12-06
      • 1970-01-01
      相关资源
      最近更新 更多