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

请求解析Rust的matches!宏中$(|)?与$(,)?元变量的作用

理解Rust中matches!宏的$(|)?和$(,)?

先看matches!宏的实际调用场景,它支持多种灵活写法:

// 常规写法
matches!(x, 1 | 2 | 3);
// 模式开头加竖线也能运行
matches!(x, | 1 | 2 | 3);
// 末尾加尾随逗号没问题
matches!(x, 1 | 2 | 3,);
// 甚至同时用开头竖线+末尾逗号
matches!(x, | 1 | 2 | 3 if x > 0,);

下面分别解释你疑惑的两个片段:

1. $(|)? 的用途

这个片段是为了兼容用户在模式列表开头写可选竖线的习惯。有些开发者写多分支模式时,会习惯在最开头就加个|(类似写match分支的风格),这个设计让宏能接受这种写法,不会因为多了个开头的|就编译报错。

宏展开时,即便用户写了开头的|,后续的$( $pattern )|+会自动把多个模式用|连接,开头的|会被自然合并到模式链里——而Rust本身允许| 1 | 2这种语法(等价于1 | 2),不会产生语法问题。

2. $(,)? 的用途

这个片段是支持宏调用末尾的可选尾随逗号,这是Rust生态里很常见的友好设计。比如用户在多行排版模式列表时,可能会习惯在最后一个模式后加逗号:

matches!(x,
    1 |
    2 |
    3, // 这里的尾随逗号不会报错
);

它能避免用户因为不小心加了尾随逗号而触发编译错误,提升宏的易用性和排版灵活性。

内容的提问来源于stack exchange,提问作者Daan van der Plas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:22:25