瑞安外贸网站建设,深圳坪山网站制作公司,销售部网站建设费,福州公交集团网站建设文章目录 过程宏类函数宏调用与测试 Rust基础教程#xff1a;初步⚙所有权⚙结构体和枚举类⚙函数进阶⚙泛型和特征⚙并发和线程通信⚙cargo包管理 Rust进阶教程#xff1a;用宏实现参数可变的函数 
过程宏 
在Rust中#xff0c;macro_rules!是最常用的宏#xff0c;也叫声… 文章目录 过程宏类函数宏调用与测试  Rust基础教程初步⚙所有权⚙结构体和枚举类⚙函数进阶⚙泛型和特征⚙并发和线程通信⚙cargo包管理 Rust进阶教程用宏实现参数可变的函数 
过程宏 
在Rust中macro_rules!是最常用的宏也叫声明式宏。 
除了这种最基础的宏之外Rust还支持三种过程宏 
类函数宏(Function-like macro)看上去就像是函数调用类属性宏(Attribute-like macro)用于为目标添加自定义的属性派生宏 #[derive]可以为目标结构体或枚举派生指定的代码例如 Debug 特征 
过程宏和声明宏有一个重要区别即过程宏首先是一个库需要在其配置文件中说明下面用cargo创建一个新的项目 
cargo new --lib marco进入文件夹后在其配置文件结尾添加 
[lib]
proc-macro  true类函数宏 
下面在lib.rs中实现一个简单的类函数宏内容如下 
#![crate_type  proc-macro]
extern crate proc_macro;
use proc_macro::TokenStream;#[proc_macro]
pub fn make_mod(n: TokenStream) - TokenStream {let output  format!(|x|{{x}} % {}, n);output.parse().unwrap()
}其中#[proc_macro]下面就是我们定义的类函数宏其语法结构也像是一个函数结构输入和输出均为TokenStream类型。 
函数内部第一行用输入的n拼接成一条符合Rust语法的字符串即如下式 
|x|{x%n}第二行将这个表达式转换为一个可执行的语句再行输出。 
调用与测试 
接下来新建一个测试项目 
cargo new --bin marco_test在其配置文件的依赖项后面添加宏包的路径 
[dependencies]
marco  { path  ../marco }最后在main.rs中调用 
extern crate marco;
use marco::make_mod;fn main() {let mod3  make_mod!(3);println!({}, mod3(5));
}主函数中也包含两行第一行是调用宏生成一个函数结合前面的代码可知这个函数就是 
|x|{x % 3}这个函数的作用就是求一个数除以 3 3 3之后的余数。 
接下来调用 mod  3 \operatorname{mod}3 mod3得到 5 % 3  2 5\%32 5%32的输出。