【Rust】宏-标志符
环境
- Rust 1.56.1
- VSCode 1.61.2
概念
参考:https://doc.rust-lang.org/rust-by-example/macros/designators.html
示例
以下是可以使用的标志符:
- block
- expr表达式
- ident变量名或函数名
- item
- literal字面量
- pat模式
- path
- stmt语句
- tt标记树
- ty类型
- vis可见性修饰符
main.rs
macro_rules! create_function {
    // 使用了 iden 标志符,参数名以$开头
    ($func_name:ident) => {
        // 将传入的参数名作为了函数名
        fn $func_name() {
            // `stringify!` 将 iden 传为字符串
            println!("You called {:?}()", stringify!($func_name));
        }
    };
}
// 使用宏创建了两个函数
create_function!(foo);
create_function!(bar);
macro_rules! print_result {
    // expr 表示表达式
    ($expression:expr) => {
        // $expression求结果
        println!("{:?} = {:?}", stringify!($expression), $expression);
    };
}
fn main() {
    foo();
    bar();
    print_result!(1u32 + 1);
    print_result!({
        let x = 1u32;
        x * x + 2 * x - 1
    });
}
总结
了解了 Rust 中带有参数的宏的定义,参数可以有不同的类型。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号