先写点简单的,后面看情况补充……
rust宏魔法(1)
Rust宏魔法——第一辑(不知道后面还会不会更新,总之这是个系列)
注:本文默认你已经有一定的Rust基础
rust的宏的强大相信大家肯定听的不少,本篇就简单说说rust的过程宏
rust的宏有好几种,有基于模式匹配的,还有可以直接对语法树动手的,过程宏就是可以修改语法树,可以在编译器派生代码:比如有个test crate,然后它依赖于test_macro crate,而后者是一个proc-macro库,也就是里面定义了过程宏,编译时就会先编译test_macro然后用test_macro的对test的语法解析流修改再丢给编译器,所以可以实现很多非常抽象的操作。
写本文的契机是,前段时间在Rust中文社区群里看到有人问能不能用宏把json生成一个enum(json只有一层),这个需求和过程宏还是很契合的,所以就简单实现了一下,以下内容就是对实现的讲解
rust宏魔法-2
Rust宏魔法——第二辑(
又来整点奇技淫巧了
这期就玩玩用声明宏来生成宏(
总结可以直接看 👉 省流
假设有以下的奇怪情景:
你整了一个日志系统,但是其中的输出内容是预设好的(当然也应该预留一个比如 Other 的来自定义内容)
然后你想要给每一种输出内容都注册一个宏,并且有些输出是带有 “{}” 的,因此你希望能够有类似下面这个效果:
1
2 app_start_failed!(e)
// App start failed due to the error : {e}也就是像
println!
之类的宏能够接受不定数量的参数,具体看格式(也就是你预设字符串里面有几个 “{}” )