gpt4 book ai didi

rust 比赛!宏在枚举方面表现出乎意料

转载 作者:行者123 更新时间:2023-12-01 23:20:35 30 4
gpt4 key购买 nike

鉴于我使用 matches!宏观
当我尝试将它与枚举一起使用时
然后它显示出意想不到的行为。

请参阅以下最小示例,playground 中也提供了该示例

pub enum Test {
FIRST,
SECOND
}

fn main() {
let x = Test::FIRST;
let y = Test::SECOND;

println!("{}", matches!(x, Test::FIRST)); // <-- 'true', as expected
println!("{}", matches!(x, Test::SECOND)); // <-- 'false', as expected

println!("{}", matches!(Test::FIRST, x)); // <-- 'true', as expected
println!("{}", matches!(Test::SECOND, x)); // <-- 'true', NOT as expected

println!("{}", matches!(x, y)); // <-- 'true', NOT as expected
}

有没有简单的解释为什么 matches! 没有按预期表现并且
是否有一种简单的方法来比较两个 enum 变量是否相等?

最佳答案

matches! 的第一个参数是一个值,第二个参数是一个模式。模式 xy 将始终成功匹配给定的任何内容,然后将其作为新变量绑定(bind)到它。

matches! 宏将丢弃此变量,因为它未被使用。您可以在收到的警告中看到这一点:

warning: unused variable: `y`
--> src/main.rs:16:32
|
16 | println!("{}", matches!(x, y));
| ^ help: if this is intentional, prefix it with an underscore: `_y`

警告告诉您 matches!(x, y)matches!(x, _y) 相同。


要比较两个 enum 值是否相等,您应该实现 PartialEq 并使用 == 运算符进行比较:

#[derive(PartialEq)]
pub enum Test {
First,
Second,
}

fn main() {
let x = Test::First;
let y = Test::Second;
println!("{}", x == y); // false
}

关于 rust 比赛!宏在枚举方面表现出乎意料,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68155018/

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