gpt4 book ai didi

rust - 彻底匹配涉及 "larger than"情况的一系列整数

转载 作者:行者123 更新时间:2023-12-03 07:50:03 26 4
gpt4 key购买 nike

考虑一个带有内置整型常量的 Rust 程序 const N: u64和运行时整数值 x: u64 。我想匹配x这样值 x < N每个人都有一个单独的特殊案例。此外,x == N 应该有一个单独的案例。和一个 x > N分别。我的第一次尝试如下所示:

const N: u64 = 3;

match x {
0 => println!("Special case for 0"),
1 => println!("Special case for 1"),
2 => println!("Special case for 2"),
N => println!("Equal"),
_ => println!("Larger"),
}

这可行,但有以下缺点:假设我将常量的值增加到 N = 4但忘记添加新的特殊情况 x = 3 。上面的代码不会在编译时捕捉到这一点,因为最后一个匹配模式( _ )也覆盖了被遗忘的情况,并且代码会默默地中断。所以我正在寻找一种具有这种编译时保证的解决方案。

要实现此目的,最后一个案例应仅匹配 x > N相反,所以我尝试使用 if条件:

match x {
0 => println!("Special case for 0"),
1 => println!("Special case for 1"),
2 => println!("Special case for 2"),
N => println!("Equal"),
_ if x > N => println!("Larger"),
}

但现在我从 Rust 收到一个错误,表明匹配并不详尽,我认为这是由于编译器不够聪明,无法分析 if健康)状况。虽然分析范围足够聪明,但我不知道如何将最后一种情况表示为范围。它必须类似于 (N+1)..=u64::MAX ,但由于加号的原因,实际上并没有编译。

到目前为止,我最好的解决方案是使用嵌套匹配,如下所示。这似乎有效,并且在 N 时也给出了所需的编译时错误。已更改,但我想知道是否有更优雅的解决方案。

match x {
0 => println!("Special case for 0"),
1 => println!("Special case for 1"),
2 => println!("Special case for 2"),
N..=u64::MAX => match x {
N => println!("Equal"),
_ => println!("Larger")
}
}

最佳答案

你可以这样做:

match x {
0 => println!("Special case for 0"),
1 => println!("Special case for 1"),
2 => println!("Special case for 2"),
N => println!("Equal"),
N.. => println!("Larger"),
}

Playground

关于rust - 彻底匹配涉及 "larger than"情况的一系列整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77456313/

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