Rust 结构体


Rust 结构体

Rust 是一门现代的、安全和高效的编程语言。Rust 的一个核心特性是结构体,它在 Rust 中被定义为一个具有命名字段的数据结构。这篇文章将会详细介绍 Rust 结构体的使用和特性。

定义结构体

Rust 中的结构体使用 struct 关键字来定义:

struct Person {
    name: String,
    age: i32,
    gender: String,
}

上面是一个简单的 Person 结构体定义,它有三个字段:nameagegender,分别代表姓名、年龄和性别,它们的类型分别是 Stringi32

创建结构体实例

要创建一个 Person 实例,我们只需要像创建一个普通变量一样使用 let 关键字和赋值运算符:

let john = Person {
    name: String::from("John"),
    age: 30,
    gender: String::from("Male"),
}

这一行代码创建了一个名为 johnPerson 实例,名字为 “John”、年龄为 30、性别为 “Male”。

访问结构体字段

Rust 中通过点 . 运算符来访问结构体的字段:

println!("Name: {}", john.name);
println!("Age: {}", john.age);
println!("Gender: {}", john.gender);

上面代码输出 john 实例的姓名、年龄和性别。

可变结构体实例

在 Rust 中,结构体实例默认情况下是不可变的,这意味着我们不能修改它们的字段值。要创建一个可变的结构体实例,我们需要使用 mut 关键字:

let mut jane = Person {
    name: String::from("Jane"),
    age: 25,
    gender: String::from("Female"),
}

在上面代码中,我们创建了一个名为 jane 的可变 Person 实例,并可以修改它的字段值:

jane.name = String::from("Jane Smith");
jane.age = 30;

元组结构体

除了普通的结构体,Rust 还提供了一种特殊的结构体——元组结构体。元组结构体类似于元组,但它们有一些具名的字段。元组结构体使用 struct 关键字定义,但它们没有字段名称:

struct Point(i32, i32);

上面的代码定义了一个名为 Point 的元组结构体,它有两个字段,这两个字段的类型都是 i32

要创建一个 Point 实例,我们可以像创建元组一样使用圆括号和逗号:

let p = Point(10, 20);

要访问 Point 实例中的字段,我们可以使用圆点 . 运算符和索引值:

println!("x = {}", p.0);
println!("y = {}", p.1);

上面的代码输出了 p 实例的 x 和 y 坐标值。

派生 trait

在 Rust 中,我们可以为结构体实现 trait,从而赋予它们一些新的行为。例如,我们可以为 Person 结构体实现 ToString trait,从而让它具有将自己转换为字符串的能力:

impl ToString for Person {
    fn to_string(&self) -> String {
        format!("Name: {}, Age: {}, Gender: {}", self.name, self.age, self.gender)
    }
}

在上面的代码中,我们使用了 Rust 中的 impl 关键字为 Person 结构体实现了 ToString trait。通过 to_string 方法,我们可以将 Person 实例转换为字符串:

let john = Person {
    name: String::from("John"),
    age: 30,
    gender: String::from("Male"),
};
println!("{}", john.to_string());

上面的代码输出了 john 实例的字符串表示。

结论

Rust 结构体是一项非常有用的特性,它使我们可以创建复杂的数据结构,并根据需要将它们传递给函数或方法。在 Rust 中,结构体可以包含不同类型的字段,并且赋予结构体一些额外的行为,例如实现 trait。

希望这份 Rust 结构体技术文档能够对你理解和使用 Rust 结构体有所帮助。