作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
鉴于我使用 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!
的第一个参数是一个值,第二个参数是一个模式。模式 x
和 y
将始终成功匹配给定的任何内容,然后将其作为新变量绑定(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/
我是一名优秀的程序员,十分优秀!