《Rust编程入门》7.1 定义与使用结构体
7.1 定义与使用结构体
结构体是 Rust 中用于组织和表示复杂数据类型的一种重要工具,它允许你将多个不同类型的数据组合成一个单独的实体。结构体是 Rust 中的一个核心概念,广泛用于表示各种类型的数据模型,如用户、商品、任务等。
7.1.1 结构体的基本概念
在 Rust 中,结构体是通过 struct
关键字来定义的。结构体可以包含多个不同类型的字段,每个字段都有自己的名称和类型。定义结构体时,你可以选择是定义一个简单的结构体,还是定义一个带有方法的结构体。
定义一个简单的结构体
最基本的结构体定义如下所示:
|
|
- 在这个例子中,
Point
是一个结构体,它包含两个字段x
和y
,它们的类型都是i32
。 - 通过
Point { x: 10, y: 20 }
语法实例化结构体,并访问其字段。
结构体实例化与字段访问
结构体的字段可以通过点 (.
) 语法来访问。例如,在上面的代码中,我们通过 p.x
和 p.y
来访问 Point
结构体的字段。
结构体实例化的快捷方式
如果变量名和字段名相同,你可以使用结构体初始化的简写方式:
|
|
7.1.2 结构体方法
结构体不仅可以包含数据,还可以包含方法,这些方法定义在 impl
块中。impl
块允许我们为结构体实现函数,这些函数通常用于操作结构体的数据。
为结构体定义方法
|
|
distance
是一个不可变的方法,它通过引用&self
来访问结构体的字段并计算点到原点的距离。move_point
是一个可变的方法,它通过&mut self
来修改结构体的字段,更新点的坐标。
方法的 self
参数
self
:表示结构体的所有权,方法会获得结构体的所有权(如果方法消耗结构体)。&self
:表示对结构体的不可变引用,方法不会修改结构体。&mut self
:表示对结构体的可变引用,方法可以修改结构体的字段。
7.1.3 结构体的元组形式
除了常规的命名字段结构体,Rust 还支持另一种类型的结构体,称为元组结构体。元组结构体类似于元组,但它们为每个元素提供了类型而非名称。元组结构体通常用于简单的场景。
元组结构体的定义与使用
|
|
Color
是一个元组结构体,它由三个i32
类型的字段组成,分别表示 RGB 颜色的红、绿、蓝成分。- 元组结构体的字段是通过索引来访问的,例如
c.0
表示访问Color
的第一个字段。
7.1.4 结构体的可变性
当你实例化一个结构体时,结构体本身的可变性取决于它的所有权。如果结构体是不可变的(默认行为),你将不能修改它的字段。如果你想修改字段的值,结构体本身必须是可变的。
|
|
mut
关键字在结构体实例化时使结构体变为可变。- 如果没有
mut
,编译器会报错,表示你不能修改不可变的结构体。
7.1.5 结构体的生命周期
结构体也可以包含引用类型的字段,引用类型的字段会受到生命周期的影响。为了确保结构体的引用字段在使用时有效,必须为结构体添加生命周期标注。
|
|
Book
结构体使用了生命周期标注'a
来表明它的引用字段title
和author
依赖于外部数据的生命周期。
7.1.6 小结
- 结构体是 Rust 中的重要数据结构,用于将多个数据值组合成一个复合数据类型。
- Rust 支持两种结构体:具名字段结构体和元组结构体。
- 结构体可以包含方法,这些方法可以是不可变或可变的,取决于方法签名中的
self
参数。 - 结构体也可以通过生命周期标注来管理包含引用的字段,以确保数据的有效性。
在接下来的部分,我们将深入探讨 Rust 中的枚举类型及其应用。