【问题标题】:Dart: A value of type 'int' can't be assigned to a variable of type 'int' [duplicate]Dart:不能将“int”类型的值分配给“int”类型的变量[重复]
【发布时间】:2021-11-18 23:48:18
【问题描述】:

当我像这样写一个扩展时:

extension MyExtension<int> on List<int> {
  void myMethod() {
    int a = 1; // error
  }
}

我从编译器收到一条看似荒谬的错误消息:

“int”类型的值不能分配给“int”类型的变量。 尝试更改变量的类型,或将右侧类型转换为“int”。飞镖(invalid_assignment)

我可以通过删除扩展名后的&lt;int&gt; 来解决此问题:

extension MyExtension on List<int> {
  void myMethod() {
    int a = 1;
  }
}

但我想知道原始有问题的代码中发生了什么。出现神秘错误消息的原因是什么?

【问题讨论】:

    标签: dart types extension-methods


    【解决方案1】:

    所以你有一个简单的问题,你正在重新分配 int 的含义

    extension MyExtension<int> on List<int>
    

    您的扩展需要一个类型参数,这意味着在使用扩展时,您可以向它传递许多不同的类型,但这个新类型参数的名称是int

    因此,您将 int(数字)分配给 int(类型参数)这是不可能的,因为 dart 不知道 int(类型参数)是否会是 int。

    为了解决这个问题,您可以像以前一样删除类型参数,您显示的代码不需要类型参数,您也可以重命名类型参数,约定说类型参数应该称为 T:

    extension MyExtension<T> on List<int> ...
    

    如果您希望类型参数始终是 int 或扩展 int 的类,您也可以声明:

    extension MyExtension<T extends int> on List<int> ...
    

    如果您仍然无法理解什么是类型参数以及它们如何工作,here is the documentation for type argumentshere is the documentation for extensions with type arguments

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      相关资源
      最近更新 更多