Z
ZHANK
复合类型

结构体 struct

命名/元组/单元结构体、impl 方法、关联函数、字段初始化简写

结构体 struct

Rust 有三种 struct:命名结构体(最常用)、元组结构体、单元结构体。配合 impl 块定义方法。

学完本章你将: 掌握 struct 定义初始化、impl 方法、关联函数、字段简写。


命名结构体

rust
struct User {
    username: String,
    email: String,
    active: bool,
    sign_in_count: u64,
}

fn main() {
    let user = User {
        email: String::from("xm@example.com"),
        username: String::from("小明"),
        active: true,
        sign_in_count: 1,
    };

    println!("{}", user.username);

    // 字段初始化简写
    let email = String::from("xh@example.com");
    let username = String::from("小红");
    let user2 = User { email, username, active: false, sign_in_count: 0 };

    // 结构体更新语法
    let user3 = User {
        email: String::from("xg@example.com"),
        ..user2  // 其余字段从 user2 复制
    };
    // ⚠️ user2 的 username 被 move 了——user2 不再可用
}

元组结构体与单元结构体

rust
// 元组结构体——有名字的元组
struct Color(i32, i32, i32);
struct Point(f64, f64);

let black = Color(0, 0, 0);
let origin = Point(0.0, 0.0);
println!("{}", black.0);  // 索引访问

// 单元结构体——无字段(用作标记)
struct AlwaysEqual;
let subject = AlwaysEqual;

impl 方法

rust
impl User {
    // 关联函数(没有 self——用作构造函数)
    fn new(email: String, username: String) -> Self {
        User { email, username, active: true, sign_in_count: 0 }
    }

    // 方法(&self)
    fn is_active(&self) -> bool {
        self.active
    }

    // 可变方法
    fn deactivate(&mut self) {
        self.active = false;
    }
}