Dart:无法将 'int' 类型的值分配给 'int' 类型的变量
Dart: A value of type 'int' can't be assigned to a variable of type 'int'
当我这样写扩展时:
extension MyExtension<int> on List<int> {
void myMethod() {
int a = 1; // error
}
}
我从编译器收到一条看似荒谬的错误消息:
A value of type 'int' can't be assigned to a variable of type 'int'.
Try changing the type of the variable, or casting the right-hand type to 'int'. dart(invalid_assignment)
我可以通过删除扩展名后的 <int>
来解决问题:
extension MyExtension on List<int> {
void myMethod() {
int a = 1;
}
}
但我想知道原来有问题的代码是怎么回事。神秘错误消息的原因是什么?
所以你遇到了一个简单的问题,你正在重新分配 int 的含义
extension MyExtension<int> on List<int>
您的扩展接受一个类型参数,这意味着在使用扩展时,您可以向它传递许多不同的类型,但这个新类型参数的名称是 int
.
因此您将 int(数字)分配给 int(类型参数),这是不可能的,因为 dart 不知道 int(类型参数)是否为 int。
为了解决这个问题,你可以像你一样删除类型参数,你显示的代码不需要类型参数,你也可以重命名类型参数,约定说类型参数应该被称为T:
extension MyExtension<T> on List<int> ...
如果您希望类型参数始终为 int,或者 class 扩展 int,您还可以声明:
extension MyExtension<T extends int> on List<int> ...
如果您仍然无法理解什么是类型参数及其工作原理,here is the documentation for type arguments and here is the documentation for extensions with type arguments
当我这样写扩展时:
extension MyExtension<int> on List<int> {
void myMethod() {
int a = 1; // error
}
}
我从编译器收到一条看似荒谬的错误消息:
A value of type 'int' can't be assigned to a variable of type 'int'. Try changing the type of the variable, or casting the right-hand type to 'int'. dart(invalid_assignment)
我可以通过删除扩展名后的 <int>
来解决问题:
extension MyExtension on List<int> {
void myMethod() {
int a = 1;
}
}
但我想知道原来有问题的代码是怎么回事。神秘错误消息的原因是什么?
所以你遇到了一个简单的问题,你正在重新分配 int 的含义
extension MyExtension<int> on List<int>
您的扩展接受一个类型参数,这意味着在使用扩展时,您可以向它传递许多不同的类型,但这个新类型参数的名称是 int
.
因此您将 int(数字)分配给 int(类型参数),这是不可能的,因为 dart 不知道 int(类型参数)是否为 int。
为了解决这个问题,你可以像你一样删除类型参数,你显示的代码不需要类型参数,你也可以重命名类型参数,约定说类型参数应该被称为T:
extension MyExtension<T> on List<int> ...
如果您希望类型参数始终为 int,或者 class 扩展 int,您还可以声明:
extension MyExtension<T extends int> on List<int> ...
如果您仍然无法理解什么是类型参数及其工作原理,here is the documentation for type arguments and here is the documentation for extensions with type arguments