rust 结构体的使用

175 阅读1分钟

rust 中没有 classrust 中的 struct 和其他语言中的 class 类似,接下来写写例子看看怎么使用。

  • rust 中的 struct 不能继承

定义一个 struct

// 定义一个结构体
struct Point {
    x: f64,
    y: f64,
}

fn main() {
    // 定义一个 Point 对象,并初始化,初始化语法用 {}
    let p1 = Point {x: 10.2, y: 23.8};
    
    // 获取结构体中的内容用 . 
    println!("x: {}, y: {}", p1.x, p1.y);
}

输出:x: 10.2, y: 23.8

给 struct 实现方法

rust 中也有类似其他语言中的类方法和实例方法,类方法就是属于类的,通过类名访问,实例方法通过实例访问。

实例方法

struct Point {
    x: f64,
    y: f64,
}

impl Point {
    // print 是Point 的实例方法,第一个参数代表实例自身,&代表引用
    fn print(&self) {
        println!("x: {}, y: {}", self.x, self.x);
    }
}

fn main() {
    let p1 = Point {x: 10.2, y: 23.8};

    // println!("x: {}, y: {}", p1.x, p1.y);
    p1.print();
}

关联函数

rust 中的类方法叫做关联函数

struct Point {
    x: f64,
    y: f64,
}

impl Point {
    fn print(&self) {
        println!("x: {}, y: {}", self.x, self.x);
    }

    // info 是一个关联函数
    fn info(p: Point) {
        println!("x: {}, y: {}", p.x, p.x);
    }
}

fn main() {
    let p1 = Point {x: 10.2, y: 23.8};
    Point::info(p1); // 使用关联函数
}

struct 不能继承

rust 中的 struct 不能继承,但是 rustTrait,就是和其他语言中的接口(interfaces)类似的功能。

定义一个 Trait

trait 中的函数的第一个参数代表要实现该 trait 对象的实例。

pub trait Summary {
    fn summarize(&self) -> String;
}

对某个类型实现 trait的语法为:

impl Trait名字 for 具体类型 {}

Point 结构实现 Summary

impl Summary for Point {
    fn summarize(&self) -> String {
        format!("----- Point Object Summary -----\nx: {0}, y: {1}", self.x, self.y)
    }
}

以上就是 rust 中的 struct 的基本使用,还有更多高级的使用方法,如:泛型多trait结构体作为函数参数Trait作为参数等。