📜  Rust——结构的概念(1)

📅  最后修改于: 2023-12-03 15:19:53.413000             🧑  作者: Mango

Rust - 结构的概念

在Rust中,结构是一种用户自定义的复合类型,可以将不同类型的数据放在一起,形成更有组织和可读性的数据类型。结构体定义了一个名称作为类型名,而且该名称可以用来实例化不同的结构体对象。

结构体的定义

结构体用于存储具有不同属性的数据,可以使用关键字struct来定义。以下是一个结构体的基本定义:

struct Student {
    name: String,
    age: i32,
    grade: String,
    marks: [i32; 5],
}

在这个例子中,我们定义了一个名为Student的结构体,其中包含了学生的姓名、年龄、等级和考试成绩。在一个结构体中,可以包含多种类型的数据,在这个例子中,namegrade是字符串类型,age是一个整型,marks是一个整型数组。

结构体的实例化

结构体被定义后,就可以使用let语句来创建一个特定的实例。使用类似于函数调用的语法创建结构体。

let student = Student {
    name: "Mary".to_string(),
    age: 20,
    grade: "A".to_string(),
    marks: [80, 70, 90, 85, 95],
};

这将创建一个名为studentStudent结构体实例。可以注意到,结构体的定义中,数据的名称和数据的类型分别用冒号和逗号分隔。

结构体的方法

结构体也可以有方法,这些方法以关键字impl定义。以下是一个结构体Rectangle的例子,它定义了一个area方法,用于计算矩形的面积。

struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

在这个例子中,我们定义了一个名为Rectangle的结构体,其包含了宽度和高度属性。使用impl关键字定义了一个area方法,它使用self参数引用矩形实例。

结构体的运算符重载

在Rust中,可以使用运算符重载来处理结构体对象。以下是一个名为Point的结构体的例子,它定义了AddSub两个运算符的重载。

#[derive(Debug)]
struct Point {
    x: i32,
    y: i32,
}

impl std::ops::Add for Point {
    type Output = Point;

    fn add(self, other: Point) -> Point {
        Point {
            x: self.x + other.x,
            y: self.y + other.y,
        }
    }
}

impl std::ops::Sub for Point {
    type Output = Point;

    fn sub(self, other: Point) -> Point {
        Point {
            x: self.x - other.x,
            y: self.y - other.y,
        }
    }
}

在这个例子中,我们定义了一个名为Point的结构体,其中包含了两个整型属性:xy。然后,我们使用关键字impl对其进行了两个运算符重载:AddSub。在这个例子中,我们定义了运算符+-,它们分别用于将两个点相加和相减。

总结

结构是Rust中复杂数据类型的重要组成部分,它可以用于存储各种不同类型的数据。在Rust中,通过使用结构体和方法,可以构建高效且易于使用的数据类型。