「Rust笔记」Rust之自定义宏写法

Posted 图解AI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「Rust笔记」Rust之自定义宏写法相关的知识,希望对你有一定的参考价值。

宏的分类

1)宏按照来源分类

声明宏(Declarative Macro)和过程宏(Procedural Macro)。

前者指的是用某种语法直接声明出的宏。

后者是对应直接生成抽象语法树的过程的宏。

2)宏按照使用方式分类

属性宏:给声明添加属性的宏,例如 #[derive(Debug)] 和 #[test]。

调用宏:像函数一样的宏,例如 println!。

3)来源分类与使用分类直接关系

明宏都是用 macro_rules! 声明出的,它声明出的一定是调用宏。过程宏可以产生属性宏,也可以产生调用宏,也就是说,属性宏都是过程宏,调用宏可能是声明宏或者过程宏。

宏的定义

使用 macro_rules!进行自定义

常用的println()宏的大概形式:

macro_rules! println 
  () => (println!("\\n"));
  ($fmt: expr) => (print!(concat!($fmt, "\\n")));
  ($fmt: expr, $($(arg:tt)*) =>
    (print!(concat!($fmt, "\\n"), $($arg)*));

1) 组成部分

有三个部分,输入分别是 ()、($fmt:ex

以上是关于「Rust笔记」Rust之自定义宏写法的主要内容,如果未能解决你的问题,请参考以下文章

Rust 1.7.0的macro宏-语法分析和使用举例

rust用鼠标宏会不会封号

rust鼠标宏会被封号吗

rust硬件宏会被ban吗

[from js to rust 系列][宏-01][官网文档 19.5]高级特性:宏[译文]

Rust 1.7.0 macro宏的复用 #[macro_use]的使用方法