模块 4 · 第 1 课(共 2)课程中的7/14~12 min
模块课程(1/2)
定义和实例化结构
Rust 中的 结构 (或结构)是自定义数据类型,允许您将多个相关值分组在一起。它们类似于其他语言中的对象或类,但没有继承。
定义结构体
要定义结构体,我们使用 struct 关键字,后跟 PascalCase 中的名称。在里面,我们定义字段的名称和类型:
Rust
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}创建实例
要使用结构体,我们必须通过填写所有指定字段来创建一个实例:
Rust
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
// Access fields using dot notation
println!("Is user {} active? {}", user1.username, user1.active);
}结构可变性
在 Rust 中,如果要修改实例的任何字段,则必须将整个实例标记为可变 (mut)。 Rust 不允许仅将某些字段标记为可变:
Rust
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
user1.active = false; // Valid because user1 is mutable!
}元组结构和类单元结构
除了经典的命名字段结构之外,Rust 还支持其他两种结构格式:
- 元组结构:它们有一个关联的名称,但字段没有单独的名称,只有类型。它们对于定义和区分特定类型很有用:
Rust
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - 类单元结构:它们不定义任何字段。它们的行为类似于
()单元类型。当您需要在类型上实现行为(特征)而不在其中存储任何数据时,它们非常有用。
自己尝试一下
锻炼#rust.m4.l1.e1
尝试:0加载中...
在 main 上面定义 User 结构体,其中包含以下字段:username(字符串类型)和 active(布尔类型)。
正在加载编辑器...
显示提示
在`main`之前写入`struct User { username: String, active: bool }`。
3 次尝试后可用的解决方案
锻炼#rust.m4.l1.e2
尝试:0加载中...
修改 user1 使其可变(let mut user1)并在打印之前将活动字段更改为 false。
正在加载编辑器...
显示提示
在`let user1`中添加`mut`,使其成为`let mut user1`,然后插入`user1.active = false;`。
3 次尝试后可用的解决方案
锻炼#rust.m4.l1.e3
尝试:0加载中...
定义一个名为 Color 的元组结构,包含三个 i32 字段。在 main 中,使用值 255、0 和 100 实例化 Color,并将其分配给变量 my_color,然后使用 println! 打印其第一个元素(红色值)。
正在加载编辑器...
显示提示
使用 struct Color(i32, i32, i32); 定义元组结构。在 main 中,将其实例化为 `let my_color = Color(255, 0, 100);`并使用`my_color.0` 打印红色值。
3 次尝试后可用的解决方案