⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Rust 宏编程基础

学习声明式宏(macro_rules!)和过程宏的概念与使用 · 难度:入门 · +15XP

Rust 宏简介

宏(Macros)是 Rust 中强大的元编程工具,分为声明式宏和过程宏两大类。它们可以在编译时生成代码,减少重复并实现 DSL(领域特定语言)。

声明式宏:macro_rules!

使用模式匹配来定义代码模板,最常用的宏形式:

macro_rules! say_hello {
    () => {
        println!("Hello!");
    };
    ($name:expr) => {
        println!("Hello, {}!", $name);
    };
}

fn main() { say_hello!(); say_hello!("Rust"); }

模式匹配与重复

宏支持多种匹配规则和重复操作:

语法说明
$x:expr匹配任意表达式
$x:ty匹配类型
$($x:expr),*匹配逗号分隔的零或多个表达式
$($x:expr),+匹配逗号分隔的一或多个表达式
macro_rules! vec_of_squares {
    ($($x:expr),*) => {
        {
            let mut v = Vec::new();
            $(v.push($x * $x);)*
            v
        }
    };
}

fn main() { let squares = vec_of_squares!(1, 2, 3, 4); println!("{:?}", squares); // [1, 4, 9, 16] }

过程宏概述

过程宏分为三类:

过程宏需要额外的 crate 支持,定义在独立的 crate 中。

调试技巧

使用 cargo expandlog_syntax! 宏查看宏展开结果:

macro_rules! debug_expand {
    ($($tokens:tt)*) => {
        {
            // 编译期打印展开结果
            log_syntax!($($tokens)*);
            $($tokens)*
        }
    };
}

练习提示: 编写一个 create_struct! 宏,接受字段名和类型列表,生成对应的结构体定义。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 122 篇
0 完成
🔥 0