You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中matches!宏使用变量与直接值为何返回不同结果?

问题解答

你的代码如下:

fn main() {
    let x = Some(1);
    let y = Some(2);
    println!("{}",matches!(x,y));
    println!("{}",matches!(x,Some(2)));
}

运行后输出true和false,核心原因是**matches!宏的第二个参数是模式匹配语法,不是直接引用外部变量**:

  • 当你写matches!(x, y)时,这里的y不是你之前定义的let y = Some(2)那个变量,而是一个新的标识符模式。这个模式会匹配任何与x类型一致的非None值(也就是所有Some(_)类型),匹配成功后会把Some内部的值绑定到这个新的y变量上(这个绑定会遮蔽外部的y),所以只要x是Some类型就会返回true,不管内部值是什么。
  • 而matches!(x, Some(2))是明确指定匹配Some内部值为2的情况,x是Some(1),自然不匹配,返回false。

如果要比较x和y两个变量的实际值是否相等,直接用x == y即可(Option类型实现了PartialEq trait,支持直接比较),或者用带条件的模式:

matches!(x, Some(val) if val == y.unwrap())

内容的提问来源于stack exchange,提问作者Josif Hamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 11:03:10