结构体概述
- 结构体是复合数据类型,由不同数据类型的字段组合而成。
- 结构体与元组相似,但字段具有命名,提高了数据的可读性和可用性。
结构体语法
定义结构体
struct User {
active: bool,
username: String,
email: String,
sign_in_count: u64,
}
创建结构体实例
let user1 = User {
email: String::from("someone@example.com"),
username: String::from("someusername123"),
active: true,
sign_in_count: 1,
};
访问结构体字段
let mut user1 = User {
};
user1.email = String::from("anotheremail@example.com");
简化结构体创建
构建函数示例
fn build_user(email: String, username: String) -> User {
User {
email,
username,
active: true,
sign_in_count: 1,
}
}
结构体更新语法
结构体更新语法示例
let user2 = User {
email: String::from("another@example.com"),
..user1
};
元组结构体
元组结构体示例
struct Color(i32, i32, i32);
struct Point(i32, i32, i32);
let black = Color(0, 0, 0);
let origin = Point(0, 0, 0);
单元结构体
单元结构体示例
struct AlwaysEqual;
impl SomeTrait for AlwaysEqual {
}
结构体数据的所有权
- 结构体可以拥有数据,如使用
String
而非 &str
。
结构体引用示例
struct User {
username: &str,
email: &str,
sign_in_count: u64,
active: bool,
}
fn main() {
let user1 = User {
email: "someone@example.com",
username: "someusername123",
active: true,
sign_in_count: 1,
};
}
使用 #[derive(Debug)]
打印结构体信息
- 通过派生
Debug
特征,使用 {:?}
格式化输出结构体。
打印结构体示例
#[derive(Debug)]
struct Rectangle {
width: u32,
height: u32,
}
fn main() {
let rect1 = Rectangle {
width: 30,
height: 50,
};
println!("rect1 is {:?}", rect1);
}
总结
- 结构体是 Rust 中定义复杂数据类型的强大工具。
- 结构体可以拥有数据,也可以借用数据,但借用需要处理生命周期问题。
- 结构体的字段可以命名,提高了代码的可读性。
- 可以使用派生特征
Debug
来简化结构体的打印输出。