macro_rules! create_function{ ($func_name:ident) => { fn $func_name(){ println!("Function {} is called." , stringify!($func_name));} };} create_function!(hello_world);fn main(){ hello_world();} DRY原则 宏的一个主要目标
/// DO NOT CHANGE BELOW HERE /// This function should be called by the `show_output!()` macro#[derive(Debug)]structCoordinate{x:i32,y:i32,}implCoordinate{fnshow(&self){println!("({}, {})",self.x,self.y);}}/// DO NOT CHANGE ABOVE HERE /// TODO: Create `for_2d!` macro ...
代码语言:javascript 代码运行次数:0 运行 AI代码解释 use proc_macro::TokenStream;#[proc_macro]pub fnexample_macro(input:TokenStream)->TokenStream{// 处理输入的代码,并生成新的代码// ...} 在上述例子中,我们使用proc_macro模块导入了TokenStream和proc_macro宏,然后定义了一个名为example_macro的函数宏。...
AI代码解释 use proc_macro::TokenStream;#[proc_macro]pub fnmy_struct(input:TokenStream)->TokenStream{letstruct_name=input.to_string();letoutput=format!("struct {} {{ data: i32 }}",struct_name);output.parse().unwrap()} 在上述例子中,我们定义了一个名为my_struct的类函数宏,并使其带有一个...
类函数宏(Function-like macro),看上去就像是函数调用。 Rust宏相比于C的宏,在类型安全性、模式匹配、卫生性(见下面注释)、定义与使用上都有大幅提升;自然其复杂程度也相比C提升不少。但也不必担心,接下来我们将逐个看看它们的庐山真面目。 注:宏的卫生性(Hygiene)是指在宏展开过程中,确保宏生成的代码与宏调用...
在Rust中,宏是一种特殊的函数,可以使用macro_rules!关键字来定义。宏定义的基本语法如下: macro_rules!macro_name {// 宏规则// ...} 其中,macro_name是宏的名称,宏规则是一系列模式匹配和替换的规则,用于匹配输入的代码片段并生成相应的代码片段。
Function 先看一个最简单的函数 fnfoo() {} 这个foo函数由关键字fn开头,后面跟一个函数名($function_name: ident), 然后是一对(), 再跟一个函数体block macro_rules!function_item_matcher { (fn$name:ident() $block: block) => {fn$name() $block ...
macro_rules!point{($name:ident,$x:expr,$y:expr)=>{struct$name{x:i32,y:i32,}impl$name{fnnew(x:i32,y:i32)->Self{$name{x,y}}fnget_x(&self)->i32{self.x}fnget_y(&self)->i32{self.y}}};}point!(Point2D,10,20);fnmain(){letp=Point2D::new(10,20);println!("x:{},y:...
macro_rules! macro_name { // 宏规则 // ... } 1. 2. 3. 4. 其中,macro_name是宏的名称,宏规则是一系列模式匹配和替换的规则,用于匹配输入的代码片段并生成相应的代码片段。 1.2 宏的分类 Rust中的宏分为两类:声明宏(Declarative Macros)和过程宏(Procedural Macros)。
派生宏(Derive macro):用于结构体(struct)、枚举(enum)、联合(union)类型,可为其实现函数或特征(Trait)。 属性宏(Attribute macro):用在结构体、字段、函数等地方,为其指定属性等功能。如标准库中的#[inline]、#[derive(...)]等都是属性宏。 函数式宏(Function-like macro):用法与普通的规则宏类似,但功能...