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

Rust宏调用报错,如何提取表达式内对象并分别使用?

问题分析与解决

错误原因

你的宏定义模式与实际调用语法不匹配:

  • 宏规则中写的是 (($vector: expr).map(($closure: expr))),要求向量和闭包都被额外的括号包裹,但实际调用时是 my_vector.map(|e| e * e),没有这些多余括号。
  • 宏展开部分错误地使用了 $vector(),这会把向量当成函数调用,而实际上它是一个本地变量,直接用 $vector 即可。

修正后的代码

macro_rules! run_map {
    ($vector: expr.map($closure: expr)) => {
        $vector.iter().map($closure).collect::<Vec<_>>()
    };
}

fn main() {
    let my_vector: Vec<i32> = vec![3,4,5];
    let result = run_map!(my_vector.map(|e| e * e));
    println!("{:?}", result); // 输出 [9, 16, 25]
}

说明

  • 宏模式调整为 $vector: expr.map($closure: expr),直接匹配 变量.map(闭包) 的语法,无需额外括号。
  • 展开部分去掉 $vector 后的括号,直接调用 $vector.iter() 遍历向量元素。
  • 闭包 $closure 直接传递给 map 方法,不需要重复标注类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:07:16