gpt4 book ai didi

rust - 为什么匹配表达式不会先于其他 ARM 报告一个包罗万象的 ARM (_) 的错误?

转载 作者:行者123 更新时间:2023-11-29 08:22:05 31 4
gpt4 key购买 nike

Rust 有一个名为 match 的结构,它看起来与其他语言中的 switch 非常相似。但是,我观察到 match 的一种非常奇特的行为。

let some_u32_value = 3;
match some_u32_value {
_ => (),
3 => println!("three"),
}

match 遵循提及案例/模式的顺序。为什么默认的(_) case在最上面不报错呢?它确实给出了警告:

warning: unreachable pattern
--> src/main.rs:5:9
|
5 | 3 => println!("three"),
| ^
|
= note: #[warn(unreachable_patterns)] on by default

Java 中的一个类似构造,开关,不保留任何顺序,因此在其他情况之前使用 default 不是错误(忽略掉落行为)。

int x = 0;

switch (x) {
default:
System.out.println("default");
break;
case 0:
System.out.println("Zero");
}

明确地这样做有什么目的吗?

最佳答案

无法访问的模式严格来说不是错误,我的意思是:它不会阻止编译器“理解”代码,也不会使代码不安全。

类似地,例如,在 C 中,您可以在不触发错误的情况下返回对局部变量的引用(至少在 gcc 中):

#include <stdio.h>

int* foo() {
int x = 0;

return &x;
}

int main() {
printf("%d", *foo());

return 0;
}

通常,您不应将警告视为“哦,那只是警告,我不在乎”。警告是编译器给出的实际有用的建议/信息。

我喜欢 中给出的定义:

A warning is often issued on recognizing a potential high-risk situation, a probable misunderstanding, degraded service or imminent failure.

因为它有助于理解错误和警告之间的区别:

  • 一个错误一个错误,
  • 警告是潜在/可能的错误或有问题的事情。

在这种情况下,匹配 的最后一部分是一些死代码,因此编译器会相应地报告它。

关于rust - 为什么匹配表达式不会先于其他 ARM 报告一个包罗万象的 ARM (_) 的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50624541/

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