Rust中println!宏无法直接格式化打印结构体字段的问题咨询
报错原因
这个编译错误和结构体字段是否实现格式化相关trait无关,属于Rust稳定版格式化宏的语法限制:println!、format!这类宏解析格式字符串时,花括号占位符内仅允许填写直接的变量名,不支持.开头的字段访问、方法调用类表达式。解析到{p.x}里的点号时宏就会直接抛出语法错误,根本不会进入后续的类型、trait校验环节。
目前可用的写法
稳定版Rust下不需要给结构体实现任何特殊trait,用下面两种方式都能正常打印字段:
- 全版本通用写法,把字段作为独立参数按顺序传入占位符,也就是你示例中已经跑通的写法:
println!("{} {}", p.x, p.y);
- 如果偏好花括号内直接写变量名的简洁风格,可以先用解构把字段绑定到局部变量再打印:
let Point { x, y } = p; println!("{x} {y}");
后续特性说明
Rust团队目前已经在推进格式化占位符支持任意表达式的特性,等该特性正式进入稳定版后,就可以直接写println!("{p.x} {p.y}"),只要对应字段类型实现了对应格式化trait(默认要求Display,用:?格式符时要求Debug)就能正常编译运行,不需要额外做配置。
内容的提问来源于stack exchange,提问作者Blueberry
相关产品推荐
相关产品推荐

