先写点简单的,后面看情况补充……

Read more »

Rust宏魔法——第一辑(不知道后面还会不会更新,总之这是个系列)

注:本文默认你已经有一定的Rust基础

rust的宏的强大相信大家肯定听的不少,本篇就简单说说rust的过程宏

rust的宏有好几种,有基于模式匹配的,还有可以直接对语法树动手的,过程宏就是可以修改语法树,可以在编译器派生代码:比如有个test crate,然后它依赖于test_macro crate,而后者是一个proc-macro库,也就是里面定义了过程宏,编译时就会先编译test_macro然后用test_macro的对test的语法解析流修改再丢给编译器,所以可以实现很多非常抽象的操作。

写本文的契机是,前段时间在Rust中文社区群里看到有人问能不能用宏把json生成一个enum(json只有一层),这个需求和过程宏还是很契合的,所以就简单实现了一下,以下内容就是对实现的讲解

Read more »

Rust宏魔法——第二辑(

又来整点奇技淫巧了

这期就玩玩用声明宏来生成宏(

总结可以直接看 👉 省流

假设有以下的奇怪情景:

你整了一个日志系统,但是其中的输出内容是预设好的(当然也应该预留一个比如 Other 的来自定义内容)

然后你想要给每一种输出内容都注册一个宏,并且有些输出是带有 “{}” 的,因此你希望能够有类似下面这个效果:

1
2
app_start_failed!(e)
// App start failed due to the error : {e}

也就是像 println! 之类的宏能够接受不定数量的参数,具体看格式(也就是你预设字符串里面有几个 “{}” )

Read more »