Dart 子类型和方法参数
Dart subtyping and method arguments
我正在尝试了解 Dart 类型系统的工作原理。
这是一个片段:
class Base {}
class Derived extends Base {}
void f(Derived x) {}
void main() {
Base x = Base();
f(x);
}
至少在 https://dartpad.dartlang.org/ 这会编译并给出以下运行时错误:
Uncaught exception:
TypeError: Instance of 'Base': type 'Base' is not a subtype of type 'Derived'
显然,接受有序集的方法不能只接受一般集。
这不应该是可以在编译时捕获的东西吗?是否有一些编译标志可以设置以便编译器可以检测到此类错误?
更新:
这是一个更简单的例子:
void main() {
num a = 2.5;
int b = a;
}
这里有一个关于此行为的未决问题:
https://github.com/dart-lang/sdk/issues/30052
如果您希望分析器为此出错,您可以在项目的根目录中创建一个名为 analysis_options.yaml 的文件,其中包含以下内容:
analyzer:
strong-mode:
implicit-casts: false
我正在尝试了解 Dart 类型系统的工作原理。 这是一个片段:
class Base {}
class Derived extends Base {}
void f(Derived x) {}
void main() {
Base x = Base();
f(x);
}
至少在 https://dartpad.dartlang.org/ 这会编译并给出以下运行时错误:
Uncaught exception:
TypeError: Instance of 'Base': type 'Base' is not a subtype of type 'Derived'
显然,接受有序集的方法不能只接受一般集。
这不应该是可以在编译时捕获的东西吗?是否有一些编译标志可以设置以便编译器可以检测到此类错误?
更新: 这是一个更简单的例子:
void main() {
num a = 2.5;
int b = a;
}
这里有一个关于此行为的未决问题: https://github.com/dart-lang/sdk/issues/30052
如果您希望分析器为此出错,您可以在项目的根目录中创建一个名为 analysis_options.yaml 的文件,其中包含以下内容:
analyzer:
strong-mode:
implicit-casts: false