结构体

与 C 和 C++ 一样,Rust 支持自定义结构体:

struct Person {
    name: String,
    age: u8,
}

fn main() {
    let mut peter = Person {
        name: String::from("Peter"),
        age: 27,
    };
    println!("{} is {} years old", peter.name, peter.age);
    
    peter.age = 28;
    println!("{} is {} years old", peter.name, peter.age);
    
    let jackie = Person {
        name: String::from("Jackie"),
        ..peter
    };
    println!("{} is {} years old", jackie.name, jackie.age);
}

关键点:

  • 结构体的运作方式与使用 C 或 C++ 时类似。
    • 不需要 typedef 即可定义类型,这与使用 C++ 类似,但与使用 C 不同。
    • 与使用 C++ 不同的是,结构体之间没有继承关系。
  • 方法是在“impl”块中进行定义的,我们将在后面的幻灯片中看到。
  • 这时可能很适合告诉学员存在不同类型的结构体。
    • 针对某类型实现 trait 时,可能会使用大小为零的结构体“e.g., struct Foo;”,但其中没有任何您要储存在值本身中的数据。
    • 下一张幻灯片将介绍元组结构体,当字段名称不重要时使用。
  • 通过语法“..peter”,我们可以从旧结构体复制大部分字段,而无需明确地输入所有字段。它必须始终是最后一个元素。