⚡ 编程实验室🏗️ 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宏:元编程的利器

学习声明式宏和过程宏的基本概念,以及如何用宏减少重复代码 · 难度:入门 · +15XP

Rust宏概述

宏是Rust中强大的元编程工具,分为声明式宏(macro_rules!)和过程宏(自定义派生、属性、函数宏)。宏在编译时展开,可以生成代码,减少重复。

声明式宏

使用macro_rules!定义模式匹配的宏:

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

say_hello!(); say_hello!("Rust");

重复模式

宏可以处理可变参数:

macro_rules! vec {
    ( $( $x:expr ),* ) => {
        {
            let mut temp_vec = Vec::new();
            $( temp_vec.push($x); )*
            temp_vec
        }
    };
}
let v = vec![1, 2, 3];

过程宏示例

过程宏需要单独库支持,以下是一个简单的函数宏概念:

// 在lib.rs中定义
#[proc_macro]
pub fn make_answer(_input: TokenStream) -> TokenStream {
    "fn answer() -> i32 { 42 }".parse().unwrap()
}
宏类型用途定义方式
声明式宏模式匹配生成代码macro_rules!
派生宏自动实现trait#[derive(MyTrait)]
属性宏修改函数/结构体#[my_attribute]

练习提示

编写一个calculate!宏,支持calculate!(a + b)calculate!(a * b)两种形式,分别返回和与积。

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

🏆 学习排行

加载中...

📊 统计

📖 122 篇
0 完成
🔥 0