rust常用的宏使用记录(九)

matches! 宏使用

rust 复制代码
matches! 是 Rust 标准库中一个非常有用的宏,它允许你方便地匹配一个表达式的结果是否符合某个模式。它的基本用法如下:


matches!(expression, pattern)
这个宏返回一个布尔值,如果 expression 匹配 pattern,则返回 true,否则返回 false。下面是一些常见的用法示例:

基本用法

let value = Some(3);
assert!(matches!(value, Some(3)));
匹配枚举

enum MyEnum {
    Foo,
    Bar(i32),
}

let e = MyEnum::Bar(10);
assert!(matches!(e, MyEnum::Bar(10)));
匹配并忽略值
使用 _ 忽略模式中的值:


let value = Some(42);
assert!(matches!(value, Some(_)));
多模式匹配
使用 | 运算符进行多模式匹配:


enum MyEnum {
    Foo,
    Bar,
    Baz,
}

let e = MyEnum::Bar;
assert!(matches!(e, MyEnum::Foo | MyEnum::Bar));
结合守卫(guard)
结合条件表达式使用:


let value = Some(4);
assert!(matches!(value, Some(x) if x > 3));
结合 Option 和 Result
rust
复制代码
let opt = Some(10);
assert!(matches!(opt, Some(x) if x > 5));

let res: Result<i32, &str> = Ok(2);
assert!(matches!(res, Ok(2)));
assert!(matches!(res, Err(_)));
结合结构体和元组

struct Point {
    x: i32,
    y: i32,
}

let p = Point { x: 1, y: 2 };
assert!(matches!(p, Point { x: 1, y: 2 }));
结合复杂模式

enum MyEnum {
    Foo(i32, i32),
    Bar { x: i32, y: i32 },
}

let e = MyEnum::Foo(1, 2);
assert!(matches!(e, MyEnum::Foo(1, 2)));

let e = MyEnum::Bar { x: 3, y: 4 };
assert!(matches!(e, MyEnum::Bar { x: 3, y: 4 }));
结合引用

let value = &Some(5);
assert!(matches!(value, &Some(5)));
这些示例展示了 matches! 宏的多种用法,涵盖了基本匹配、忽略值、多模式匹配、结合守卫、结构体匹配和复杂模式匹配等场景。matches! 宏的灵活性使得它在各种条件检查和模式匹配中都非常有用。
相关推荐
青川Lapis5 小时前
RUST:错误处理 thiserror 详解
rust
Source.Liu10 小时前
【A11】拥有者模式平台架构笔记
windows·笔记·架构·rust
sayang_shao11 小时前
用 Rust 开发 STM32H743:从零搭建一个能烧录、能看日志的项目
stm32·单片机·rust
qq_4069810312 小时前
大白话rust系列02原始数据类型
rust
遇码14 小时前
macOS 触摸板捏合在 GPUI 里无响应:vendor 打补丁,把手势合成为 cmd+滚轮事件
rust·图形渲染·策略模式·桌面应用·gpui
geovindu14 小时前
rust: Chain of Responsibility Pattern
开发语言·后端·设计模式·rust·责任链模式·行为模式
geovindu16 小时前
rust: Chain of Responsibility Pattern (续)
开发语言·后端·设计模式·rust·责任链模式·行为模式
Amos_Web16 小时前
Rspack 源码解析(二十四):AssetPlugin 如何让图片同时是「URL 字符串」和「真实文件」
前端·rust·前端框架
wflynn2 天前
GitHub 今日推荐|solidcraft:Rust 跨平台参数化 CAD,支持 AI 代理通过 MCP 协议驱动建模
rust·开源·github·cad·3d-modeling·brep