我知道is
关键字可用于检查实例的类型。但是,当我尝试使用Type
变量而不是像这样直接使用带有is
的类型时,
final Type myType = String;
print('MyString' is myType); //ERROR
它会引发以下错误。
名称“ myType”不是类型,不能在“ is”表达式中使用 -第2行
但是如果我像这样使用runtimeType
和==
,就可以正常工作。
final Type myType = String;
print('MyString'.runtimeType == myType); //TRUE
能否请您解释这种现象的原因?
答案 0 :(得分:0)
根据@ julemand101的评论,有一个github issue on the official dart repository。显然,使用is
进行运行时类型比较的实现会导致大量的代码大小开销。
通常,唯一的反对依据是估计 代码大小的影响,因为编译器无法很好地估算 在程序中可能会进行类型检查-因此不再抛出 删除一些与类层次结构关联的元数据。 @rakudrama已经对dart2js进行了实验,以估算近似值 影响,并且在代码大小方面看到了一些不可忽略的成本。