定义结构体
在 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> 类型来实现:
// www.javascriptcn.com code example
#[derive(Debug)]
struct Rectangle {
width: u32,
height: Option<u32>,
}
let rect1 = Rectangle { width: 30, height: Some(50) };
let rect2 = Rectangle { width: 30, height: None };
println!("{:#?}", rect1);
println!("{:#?}", rect2);在这个例子中,我们定义了一个名为 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 类型的实例。
更新语法
当你需要创建一个与现有结构体实例非常相似的新实例时,可以使用更新语法:
// www.javascriptcn.com code example
let user1 = User {
username: String::from("someusername123"),
email: String::from("someone@example.com"),
sign_in_count: 1,
active: true,
};
let user2 = User {
email: String::from("anotheremail@example.com"),
..user1
};
println!("user1: {:#?}", user1);
println!("user2: {:#?}", user2);在这个例子中,我们创建了一个新的 User 实例 user2,并将 user1 的其余部分复制到 user2 中。
结构体方法
你可以在结构体上定义方法。方法是具有特殊形式的函数,其中 self 参数是第一个参数:
// www.javascriptcn.com code example
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
}
let rect1 = Rectangle { width: 30, height: 50 };
println!("The area of the rectangle is {} square pixels.", rect1.area());在这个例子中,我们在 Rectangle 结构体上定义了一个名为 area 的方法,该方法计算矩形的面积。
关联函数
关联函数不是方法,因为它们不接受 self 作为参数。它们通常用于构造结构体的实例:
impl Rectangle {
fn square(size: u32) -> Rectangle {
Rectangle { width: size, height: size }
}
}
let square = Rectangle::square(3);在这个例子中,我们定义了一个名为 square 的关联函数,该函数返回一个新的 Rectangle 实例,其宽度和高度相同。
以上是关于 Rust 结构体的详细内容。通过这些示例,你应该能够理解如何定义、实例化和操作结构体。