MST
星途 面试题库

面试题:Rust宏系统中如何定义一个带参数的函数宏

请举例说明如何在Rust中定义一个带参数的函数宏,该宏接受一个整数参数,并打印出该整数的平方值。同时解释宏定义中各个部分的含义。
19.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义一个带参数的函数宏
macro_rules! print_square {
    // 匹配规则,接受一个整数参数 $n
    ($n:expr) => {
        // 计算并打印参数 $n 的平方值
        println!("The square of {} is {}", $n, $n * $n);
    };
}

宏定义各部分含义:

  1. macro_rules! print_square:定义一个名为 print_square 的宏。macro_rules! 是Rust中定义宏的关键字。
  2. ($n:expr):这是宏的匹配模式。$n 是定义的参数名,$ 表示这是一个宏变量。:expr 表示这个参数是一个表达式类型,在这个例子中可以接受一个整数表达式。
  3. =>:分隔匹配模式和替换代码块。
  4. println!("The square of {} is {}", $n, $n * $n);:这是替换代码块,当宏被调用且参数匹配 ($n:expr) 模式时,这段代码会被插入到调用宏的位置。它会打印出传入参数 $n 及其平方值。

使用示例:

fn main() {
    print_square!(5);
}

main 函数中调用 print_square!(5),宏会被展开为 println!("The square of 5 is {}", 5 * 5);,最终输出 The square of 5 is 25