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

如何实现Rust宏以通过字节串生成匹配分支切片

Rust宏实现match切片语法简化

要实现将mm!(b"for")展开成[b'f', b'o', b'r', ..]的宏,核心是在编译期解析字节串字面量的每个字符,拼接成match所需的切片模式。

宏实现代码

macro_rules! mm {
    // 匹配字节串字面量,捕获内部所有字符
    (b"$($c:tt)*") => {
        // 将每个捕获的字符转为b'c'形式,拼接成带..的切片模式
        [$(b'$c'),*, ..]
    };
}

使用示例

fn main() {
    let test_cases = [
        b"for loop",
        b"func call",
        b"hello world",
    ];

    for &buf in &test_cases {
        match buf {
            mm!(b"for") => println!("Matched prefix: 'for'"),
            mm!(b"func") => println!("Matched prefix: 'func'"),
            _ => println!("No matching prefix"),
        }
    }
}

工作原理

  • 宏模式(b"$($c:tt)*")精准匹配b"..."格式的字节串字面量,其中$($c:tt)*会捕获字符串内部的每个字符(包括转义序列,比如\n会被完整捕获)
  • 展开部分[$(b'$c'),*, ..]将每个捕获的字符转换为b'c'的字节字面量,用逗号分隔后追加..,完全符合match表达式中前缀切片的语法要求

注意事项

  • 该宏仅支持字节串字面量,无法接收变量(因为宏是编译期展开,变量的字节内容无法在编译期拆分)
  • 支持包含转义序列的字节串,比如mm!(b"for\n")会展开为[b'f', b'o', b'r', b'\n', ..]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:17:23