gpt4 book ai didi

dart - Dart :强制进行强类型比较

转载 作者:行者123 更新时间:2023-12-03 03:01:47 25 4
gpt4 key购买 nike

我只是不得不审查带有难以发现的错误的 Dart 代码。它看起来像这样:

enum Day{
Mon,
Tue,
}

void main(){
Day today = Day.Mon;

if(today == 0){
print("it's Monday");
}
}

错误是dart中的枚举不是整数。 Day与任何整数之间的比较将始终返回false。

但是,对于Java开发人员来说,这看起来可能是编写错误但有效的代码。在Java中,枚举基本上是整数。我认为Go中也是一样。

Android Studio意识到了这个问题,并用灰色强调了代码。如果将鼠标悬停在该行上,它会告诉您:

Equality operator == invocation with references of unrelated types.



视觉标记很容易忽略,如果您使用类似Github的代码进行代码审查,您可能根本看不到。

我的问题是:我可以以某种方式在比较中强制执行类型安全性吗?
理想情况下,我想指定一个捕获这一点的编译器标志。
例如,以下Rust代码无法编译:
fn main() {
println!("{}", "Hello, world!" == 0);
}

error[E0277]: can't compare &str with {integer}



switch语句中,编译器强制执行类型安全性,这不会编译:
switch(today){
case 1:
//...
}

我也可以针对if语句获得这种行为吗?

最佳答案

编辑(或创建)您的analysis_options.yaml文件,并为 unrelated_type_equality_checks 添加 Lint ,并将其视为错误:

linter:
rules:
- unrelated_type_equality_checks

analyzer:
errors:
unrelated_type_equality_checks: error

启用该功能后,对您的代码运行 dartanalyzer应该会生成:
error • Equality operator `==` invocation with references of unrelated types at foo.dart:9:6 • unrelated_type_equality_checks

有关配置 analysis_options.yaml的更多信息,请参见 Customizing static analysis的文档。您还可以看到 Supported Lint Rules以获取支持的 Lint 的完整列表。

关于dart - Dart :强制进行强类型比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56603089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com