首页 > 解决方案 > Dart 运行时类型与 'is' 关键字的比较

问题描述

我知道is关键字可用于检查实例的类型。但是当我尝试使用Type变量而不是直接使用这样的类型时is

final Type myType = String;
print('MyString' is myType); //ERROR

它引发以下错误。

名称“myType”不是类型,不能在“is”表达式中使用 - 第 2 行

但是,如果我像这样使用runtimeTypeand ==,它就可以正常工作。

final Type myType = String;
print('MyString'.runtimeType == myType); //TRUE

你能解释一下这种行为的原因吗?

标签: darttypes

解决方案


根据@julemand101 的评论,官方 dart 存储库上有一个 github 问题。显然,运行时类型比较的实现is引入了代码大小的显着成本

一般来说,唯一反对这一点的论点是基于估计的代码大小影响,因为编译器失去了一种很好的方法来估计程序中可能发生哪些类型检查——因此不能再丢弃一些与类层次结构相关的元数据。@rakudrama 对 dart2js 进行了实验,以估计近似影响,并在代码大小方面看到了一些不可忽略的成本。


推荐阅读