Rust宏编写

Rust提供了一个强大的宏, 可进行元编程.看起来和函数很像, 只不过名称末尾有一个!

一句换概括: 用代码生成代码, 控制代码, 扩展代码

写一个最简单的宏 后边加!号的都是宏


// main.rs
#[macro_use]
mod mymacro;
// macro_test 宏
fn macro_test() {
    echo_me!()
  	// 结果 kuqi
}


// mymacro.rs
// 定义宏
macro_rules! echo_me {
    () => {
        println!("kuqi")
    };

}


可以传入参数的宏 ( expr ->表达式)

// mymacro.rs

// 定义宏
macro_rules! echo_me {
    () => {
        println!("kuqi")
    };

    ($exp: expr) => {
        println!("{:?}", $exp);
    }
}

宏添加可变参数 (就是**args , kwargs ) Rust的函数中不支持 宏中支持

// mymacros.rs 

// 定义宏
macro_rules! echo_me {
    // () => {
    //     println!("kuqi")
    // };
    //
    // ($exp: expr) => {
    //     println!("{:?}", $exp);
    // };

    // + 至少一个   // * 0到所有 有点像正则
    ($($exp: expr), +) => {
        $(
            println!("{:?}", $exp);
        )+
    };
}

// main.rs
echo_me!("123", "agag", "faga");
// "123"
// "123"
// "agag"

  • **元编程 - 利用宏创建自定义的函数 ** (有点像python中的type 动态的创建类)
ident 指示符 常用于函数名或变量名

// mymacros.rs
macro_rules! diy_func {
    ($fn_name: ident) => {
        fn $fn_name () {
            println!("my fn name is : {:?}", stringify!($fn_name));
        }
    };
}
		
		// golang 就是传入的函数名 无需定义
    diy_func!(golang);
    golang();
		
	// 结果 my fn name is : "golang"

posted @   听风走了八千里  阅读(808)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示