Dart 中使用 switch-case 进行类型比较的说明

问题描述 投票:0回答:1

为什么这不起作用

Type type = double;

switch (type) {
  case int:
    print('int');
  case double:
    print('double');
}

但是这样

switch (type) {
  case const (int):
    print('int');
  case const (double):
    print('double');
}

const (Type)
有什么用?它看起来就像将一个类或类型(以下简称类)转换为其常量形式。好吧,首先,将某些东西变成常量对我来说似乎是错误的,就像,我们只是定义它们并禁止重新定义它们。让某些东西只在一段时间内不可变,而不是不改变它,有什么意义呢? 其次,类本身在运行时不是不可变的吗?本质上可以理解为一个常量?

为什么不直接使用第一种形式来编写 switch-case 来比较类型呢?要么我不明白

const (Type)
的作用,要么我不明白类是什么(如果是这样,那么我希望只在 Dart 中)。

dart switch-statement
1个回答
0
投票

代码有效。

这个问题可能是由关于不使用case int:

lint警告
提出的。

这是令人沮丧的,因为人们错误地写了

switch (someValue) { case int: ...}
并期望它检查该值是否是整数。 相反,它检查该值是否是等于
Type
int
对象,并且不会发出有关它无法匹配的警告(因为假设它可能是实现
Type 的已开启类型的子类的实例) 
)。

您应该使用

int _
int()
检查该值是否为整数,为了避免 lint 警告,您可以使用
== int
const (int)
来强调您确实想要与
Type 进行比较
物体。

一般来说,比较

Type
对象通常是类设计与问题不匹配的标志。它通常也是脆弱且容易出错的代码。

© www.soinside.com 2019 - 2024. All rights reserved.