dart - Dart 运行时类型与 'is' 关键字的比较
问题描述
我知道is
关键字可用于检查实例的类型。但是当我尝试使用Type
变量而不是直接使用这样的类型时is
,
final Type myType = String;
print('MyString' is myType); //ERROR
它引发以下错误。
名称“myType”不是类型,不能在“is”表达式中使用 - 第 2 行
但是,如果我像这样使用runtimeType
and ==
,它就可以正常工作。
final Type myType = String;
print('MyString'.runtimeType == myType); //TRUE
你能解释一下这种行为的原因吗?
解决方案
根据@julemand101 的评论,官方 dart 存储库上有一个 github 问题。显然,运行时类型比较的实现is
引入了代码大小的显着成本。
一般来说,唯一反对这一点的论点是基于估计的代码大小影响,因为编译器失去了一种很好的方法来估计程序中可能发生哪些类型检查——因此不能再丢弃一些与类层次结构相关的元数据。@rakudrama 对 dart2js 进行了实验,以估计近似影响,并在代码大小方面看到了一些不可忽略的成本。
推荐阅读
- javascript - 当我使用forEach方法时,浏览器说没有这个功能;会是什么呢?
- sql - 如何旋转两个内部连接
- c++ - Invalid use of incomplete type (for a pointer to atomic integer variable)
- pandas - 将 Shuffled DF 与新的输出 DF 合并 - Pandas
- react-native - 我是否将 ATS 与 React Native Firebase 一起使用?
- r - semPlot::semPaths 在清单变量节点中不需要的条形图
- javascript - 尝试在 Laravel 中使用 ping 工具包
- javascript - 登录后将用户路由到另一个组件时出错
- powershell - 使用 PowerShell 打开特定文件夹
- c++ - 修改数据文件中的记录