Raj*_*jan 1 warnings match rust
Rust 有一个名为的构造match,它看起来与switch其他语言中的非常相似。但是,我观察到match.
let some_u32_value = 3;
match some_u32_value {
_ => (),
3 => println!("three"),
}
Run Code Online (Sandbox Code Playgroud)
match尊重提及案例/模式的顺序。如果默认( _) 大小写在顶部,为什么不报错?但它确实发出警告:
let some_u32_value = 3;
match some_u32_value {
_ => (),
3 => println!("three"),
}
Run Code Online (Sandbox Code Playgroud)
Java 中的一个类似构造,即 switch,不保留任何顺序,因此default在其他情况之前具有优先权不是错误(忽略 fall through 行为)。
warning: unreachable pattern
--> src/main.rs:5:9
|
5 | 3 => println!("three"),
| ^
|
= note: #[warn(unreachable_patterns)] on by default
Run Code Online (Sandbox Code Playgroud)
明确地这样做有什么目的吗?
无法访问的模式严格来说并不是错误,我的意思是:它不会阻止编译器“理解”代码,也不会使代码不安全。
类似地,C例如,您可以在不触发错误的情况下返回对局部变量的引用(至少使用gcc):
#include <stdio.h>
int* foo() {
int x = 0;
return &x;
}
int main() {
printf("%d", *foo());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
通常,您不应将警告视为“哦,那只是警告,我不在乎”。警告是编译器给出的实际有用的建议/信息。
我喜欢警告中给出的定义:
在识别出潜在的高风险情况、可能的误解、服务降级或即将发生的故障时,通常会发出警告。
因为它有助于理解错误和警告之间的区别:
在这种情况下,最后一个分支match是一些死代码,因此编译器会相应地报告它。
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |