结构体 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;
}
}