use std::fmt; // 导入 `fmt` 模块。
// 定义一个包含单个 `Vec` 的结构体 `List`。
struct List(Vec<i32>);
//我们定义了一个List结构体,然后有一个名字叫fmt::Display的特性,
// 我们的list 拥有了这个特性,然后并且实例化了他。
// fn fmt(&self, f: &mut Formatter<'_>) -> Result ;
// 这就是这个特性的抽象方法,&self就是当前对象自己,java中的this
// 第二个参数名字是f。它是一个可变引用,类型是Formatter
// 我们试用write宏吧想要的输出写入到f里面去,
// ?表示遇到错误直接return,这算是一个语法糖==java中的return ,
impl fmt::Display for List {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
// 使用元组的下标获取值,并创建一个 `vec` 的引用。
let vec = &self.0;
write!(f, "[")?;
// 使用 `v` 对 `vec` 进行迭代,并用 `count` 记录迭代次数。
for (count, v) in vec.iter().enumerate() {
// 对每个元素(第一个元素除外)加上逗号。
// 使用 `?` 或 `try!` 来返回错误。
if count != 0 {
write!(f, ", ")?;
}
write!(f, "{}: {}", count,v)?;
}
// 加上配对中括号,并返回一个 fmt::Result 值。
write!(f, "]")
}
}
fn main() {
let v = List(vec![1, 2, 3]);
println!("{}", v);
}
RUST结构体的Display输出
最新推荐文章于 2025-03-05 14:58:20 发布