dart - 具有变量类型的“is”语句
问题描述
我想检查一下,如果我的变量 k 有一个称为 T 的类型。我的方法是
int k=1;
Type T=int;
if(k is T) print('same type');
但它不起作用。它有效,如果我写
if(k is int)
但我想更改变量中的类型。
谢谢你的回答
解决方案
你不能Type
在 Dart 中使用对象进行类型检查。
Type
对象不是类型,它只是表示可以与dart:mirrors
反射库一起使用的类型的标记。它真的不能用于其他任何事情。
如果您需要进行类型检查,则需要将类型存储为类型变量,这意味着您需要一些通用的东西,或者将其存储在纯代码中作为闭包。
闭包方法更简单,但可读性较差:
int k = 1;
var typeChecker = (o) => o is int;
if (typeChecker(o)) print("k has the right type");
使用通用辅助类更通用:
class Typer<T> {
bool isType(Object o) => o is T;
bool operator >=(Typer other) => other is Typer<T>;
bool operator <=(Typer other) => other >= this;
}
...
var k = 1;
var type = Typer<int>();
if (type.isType(k)) print("k is integer");
简而言之,不要Type
用于任何事情,除非dart:mirrors
因为它对其他任何事情都没有真正用处。
推荐阅读
- python-3.x - 如何构建流程树?
- npm - 如何找到尝试在启动时创建错误目录的 NPM 的配置
- c - 我的项目每次都有不同的结果
- python - 组合两个 if 语句时出现 TypeError 问题
- excel - 使用封闭 XML 导出 .xlsx/.xls
- amazon-web-services - 创建 ec2 实例时播放的 ansible 未定义变量
- amazon-web-services - 在 AWS Athena 中创建存储桶表
- vhdl - VIVADO 测试台输出错误说顶部是黑盒
- tensorflow - Tensorflow 子类化问题
- node.js - libreoffice-convert 在 nodejs 中不起作用