如何在Rust宏中同时获取变量的名称与对应值?
实现方法
完全可以实现该需求,Rust标准库内置的stringify!宏可以实现类似C语言宏中#运算符的功能,它会将传入的语法片段直接转换为对应的字符串字面量。
单变量版本实现
宏定义代码如下:
macro_rules! printvar { ($x:expr) => { println!("{} = {}", stringify!($x), $x); }; }
使用示例:
fn main() { let my_variable: i32 = 5; printvar!(my_variable); // 输出:my_variable = 5 }
多变量扩展版本
可以进一步修改宏以支持同时打印多个变量:
macro_rules! printvar { // 支持任意数量逗号分隔的参数,末尾可选逗号 ($($x:expr),+ $(,)?) => { $( println!("{} = {}", stringify!($x), $x); )+ }; }
使用示例:
fn main() { let age = 25; let name = "张三"; let score = 94.5; printvar!(age, name, score); }
输出结果:
age = 25 name = 张三 score = 94.5
补充说明
如果传入的参数是表达式而非单独变量,stringify!会将整个表达式转换为字符串,例如执行printvar!(age * 2)会输出age * 2 = 50,属于正常行为。
内容的提问来源于stack exchange,提问作者JShorthouse
相关产品推荐
相关产品推荐

