use std::fmt;
struct Group {
name: String,
nums: Vec<i32>,
}
impl fmt::Display for Group {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "Group: [{}] - [", self.name)?;
for (i, num) in self.nums.iter().enumerate() {
if i > 0 {
write!(f, ", ")?;
}
write!(f, "{}", num)?;
}
write!(f, "]")
}
}
fn main() {
let groups: Vec<Group> = vec![
Group {
name: "group1".to_string(),
nums: vec![1, 2, 3],
},
Group {
name: "group2".to_string(),
nums: vec![4, 5, 6],
},
];
for group in &groups {
println!("{}", group);
}
}
格式化 trait 实现思路
- 实现
fmt::Display
trait:为 Group
结构体实现 fmt::Display
trait,这样就可以使用 println!("{}", group)
这种格式化输出方式。
- 格式化输出逻辑:
- 在
fmt
方法中,首先输出固定的前缀 Group: [
以及结构体中的 name
字段,再输出 ] - [
。
- 然后遍历
nums
字段中的元素,依次输出每个数字,并在数字之间添加逗号和空格作为分隔符。
- 最后输出后缀
]
,完成格式化输出。
- 在
main
函数中测试:创建一个包含多个 Group
结构体实例的 Vec
,遍历这个 Vec
并使用 println!
输出每个 Group
实例,就会按照自定义的格式输出。