【问题标题】:The return type 'int' isn't a 'int', as defined by anonymous closure返回类型“int”不是匿名闭包定义的“int”
【发布时间】:2019-11-28 00:31:51
【问题描述】:

我在 dart 中定义了一个名为“TestDelegate”的函数,如下所示:

typedef TestDelegate = T Function<T>();
TestDelegate delegate = <int>(){
  return 1;  <== error line
};

它产生了一个错误:

返回类型“int”不是匿名闭包定义的“int”。

我能做些什么来解决它?

【问题讨论】:

  • 备案:你的函数值是一个泛型函数,类型参数名为&lt;int&gt;。就好像您使用 T Function&lt;T&gt;() 的预期类型编写了 &lt;X&gt;() { return 1; }。文字1 的类型为int(来自dart:core 的类型)不是int 类型(您刚刚介绍的类型变量)。
  • @lrn,谢谢你的解释!但是这个错误信息到底是什么意思呢?为什么提到闭包?
  • 第二个提到的int 是匿名闭包的&lt;int&gt;(){...} 类型参数。上下文类型意味着&lt;int&gt;(){...} 函数(我们将其写成&lt;X&gt;() { ... },因为这里的int 只是一个变量名)被推断为具有X Function&lt;X&gt;()。然后它会抱怨因为1 的类型是int 并且不能分配给X。然后一切都会变得混乱,因为类型变量不是称为X,而是int。如果它是X,那么它会说“The return type 'int' isn't a 'X', as defined by anonymous closure.

标签: dart


【解决方案1】:

你必须在 TestDelegate 上声明泛型

typedef TestDelegate<T> = T Function();

void main() {
  print('RESULT: ${_delegate()}');
}

TestDelegate<int> _delegate = () {
  return 1;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多