定义结构体
在 Rust 中,你可以使用 struct
关键字来定义一个结构体。结构体是一种用户自定义的数据类型,可以包含多个不同类型的字段。
struct User { username: String, email: String, sign_in_count: u64, active: bool, }
上述代码定义了一个名为 User
的结构体,它有四个字段:username
、email
、sign_in_count
和 active
。每个字段都有一个类型注解。
创建实例
要创建结构体的实例,只需提供与结构体字段相匹配的值:
let user1 = User { username: String::from("someusername123"), email: String::from("someone@example.com"), sign_in_count: 1, active: true, };
在这个例子中,我们创建了一个 User
类型的变量 user1
,并初始化了它的所有字段。
可选字段
在某些情况下,你可能希望结构体的某些字段是可选的。这可以通过使用 Option<T>
类型来实现:
-- -------------------- ---- ------- ---------------- ------ --------- - ------ ---- ------- ------------ - --- ----- - --------- - ------ --- ------- -------- -- --- ----- - --------- - ------ --- ------- ---- -- ----------------- ------- ----------------- -------
在这个例子中,我们定义了一个名为 Rectangle
的结构体,并且 height
字段是一个可选字段。我们可以为 height
字段提供一个 Some(u32)
值或 None
值。
元组结构体
元组结构体是一种特殊的结构体,它没有命名字段,而是通过位置来访问其字段:
struct Color(i32, i32, i32); struct Point(i32, i32, i32); let black = Color(0, 0, 0); let origin = Point(0, 0, 0);
在这个例子中,我们定义了两个元组结构体 Color
和 Point
。它们分别表示颜色和点,但它们都是通过位置来访问字段的。
单元结构体
单元结构体是一种没有任何字段的结构体。它们通常用于实现 trait:
struct Nil; let instance = Nil;
在这个例子中,我们定义了一个名为 Nil
的单元结构体,并创建了一个 Nil
类型的实例。
更新语法
当你需要创建一个与现有结构体实例非常相似的新实例时,可以使用更新语法:
-- -------------------- ---- ------- --- ----- - ---- - --------- -------------------------------- ------ ------------------------------------ -------------- -- ------- ----- -- --- ----- - ---- - ------ ----------------------------------------- ------- -- ---------------- ------- ------- ---------------- ------- -------
在这个例子中,我们创建了一个新的 User
实例 user2
,并将 user1
的其余部分复制到 user2
中。
结构体方法
你可以在结构体上定义方法。方法是具有特殊形式的函数,其中 self
参数是第一个参数:
-- -------------------- ---- ------- ------ --------- - ------ ---- ------- ---- - ---- --------- - -- ----------- -- --- - ---------- - ----------- - - --- ----- - --------- - ------ --- ------- -- -- ------------- ---- -- --- --------- -- -- ------ --------- --------------
在这个例子中,我们在 Rectangle
结构体上定义了一个名为 area
的方法,该方法计算矩形的面积。
关联函数
关联函数不是方法,因为它们不接受 self
作为参数。它们通常用于构造结构体的实例:
impl Rectangle { fn square(size: u32) -> Rectangle { Rectangle { width: size, height: size } } } let square = Rectangle::square(3);
在这个例子中,我们定义了一个名为 square
的关联函数,该函数返回一个新的 Rectangle
实例,其宽度和高度相同。
以上是关于 Rust 结构体的详细内容。通过这些示例,你应该能够理解如何定义、实例化和操作结构体。