Rust中使用宏索引元组时遭遇意外token错误求助
Rust元组遍历宏编译错误排查与修复
问题背景
尝试编写宏来遍历元组元素,弥补元组无法直接迭代的限制,但遇到编译错误:
error: expected one of `:`, `;`, `=`, `@`, or `|`, found `0`
错误原因
原宏代码中生成的变量名t$i会展开为t0、t1,而Rust的标识符命名规则要求必须以字母或下划线开头,以数字开头的t0、t1属于非法标识符,触发编译错误。
修复方案
将变量名修改为合法格式,比如在数字前添加下划线,确保标识符符合Rust规范:
fn main() { let tuple = (1, 2); macro_rules! index_tuple { ($($i:literal),+) => { $( let t_$i = tuple.$i; )+ } } index_tuple!(0, 1); }
修改后,宏展开会生成t_0、t_1这类合法标识符,代码即可正常编译运行。
内容的提问来源于stack exchange,提问作者Orange_Murker
相关产品推荐
相关产品推荐

