Rust编程进阶:080、类属性宏和类函数宏

6、类属性宏
类属性宏与自定义派生宏相似,不同于为 derive 属性生成代码,它们允许你创建新的属性。

例子:
可以创建一个名为 route 的属性用于注解 web 应用程序框架(web application framework)的函数:
#[route(GET, "/")]
fn index() {

#[route] 属性将由框架本身定义为一个过程宏。其宏定义的函数签名看起来像这样:
#[proc_macro_attribute]
pub fn route(attr: TokenStream, item: TokenStream) -> TokenStream {

说明:类属性宏其它工作方式和自定义derive宏工作方式一致。

7、类函数宏
类函数宏定义看起来像函数调用的宏。类似于 macro_rules!,它们比函数更灵活。
例子:
如sql!宏,使用方式为:
let sql = sql!(SELECT * FROM posts WHERE id=1);
则其定义为:
#[proc_macro]
pub fn sql(input: TokenStream) -> TokenStream {

8、宏的资料推荐
https://danielkeep.github.io/tlborm/book/mbe-macro-rules.html
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章