我无法理解Dart编辑器如何分析源代码

 _西兰花_ 发布于 2023-01-20 15:00

Dart编辑器版本1.2.0.release(STABLE).Dart SDK 1.2.0版.

此源代码生成运行时异常.

void main() {
  test(new Base());
}

void test(Child child) {
}

class Base {
}

class Child extends Base {
}

我假设分析仪生成这样的东西.

The argument type 'Base' cannot be assigned to the parameter type 'Child'

但是我只能在发生此异常(post factum)时在运行时检测到此错误.

Unhandled exception:
type 'Base' is not a subtype of type 'Child' of 'child'.

lrn.. 6

分析仪遵循此处的语言规范.

它仅警告参数表达式的静态类型是否不能赋值给参数的函数类型.

在Dart中,如果任一类型是另一种类型的子类型,则一种类型的表达式可分配给另一种类型的变量.

这不是一种安全的类型检查.它找不到所有可能的错误.另一方面,它也不会禁止一些正确的用途,例如:

Base foo = new Child();
void action(Child c) { ... }
action(foo);  // Perfectly correct code at runtime.

其他语言有安全的分配检查,但它们也阻止了一些正确的程序.然后,您必须添加(不安全/运行时检查)强制转换操作符,以告诉编译器您知道该程序是安全的.这是Dart选择宽容并避免大多数演员阵容的权衡.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有