likes
comments
collection
share

Rust(21): 结构体方法

作者站长头像
站长
· 阅读数 27

今天学习的内容是 Rust 中的方法,具体来讲是结构体类型中的方法,以及结构体的关联函数。

结构体方法

在 JS 中,函数和方法是同一个概念,只不过语境不同。一个独立的函数就叫函数,一个对象的成员是一个函数的化,通常称为某某对象的某某方法。

方法

Rust 中和 JS 对象相对应的类型叫作结构体。

Rust 中使用 impl 块为结构体添加一个方法。impl 关键字是 implements 的缩写,实现的意思,表示为结构体实现方法和函数。

结构体的方法本质上就是函数,使用 fn 关键字来声明,可以接收参数,来执行一段逻辑,并有返回值。方法的第一个参数永远为 &selfself 表示调用该方法的结构体实例,类似于面向对象编程语言中的 this,可以通过 self 关键字访问结构体和其他方法的数据。

#[derive(Debug)]
// 定义一个表示平面坐标系上的点的结构体
struct Point {
    x: u32,
    y: u32,
}
​
impl Point {
    // 类似于面向对象编程中对象的实例方法
    // 该方法返回 Point 结构体的 x 坐标
    fn get_x(&self) -> u32 { 
        self.x
    }
​
    // 修改结构体中的数据,需要使用可变引用 &mut
    // 该方法修改 Point 结构体的 x 坐标
    fn set_x(&mut self, x: u32) {
        self.x = x; 
    }
}

访问结构体中的方法使用单点号 .

fn main() {
    let mut p = Point {10, 10};
    println!("{:?}", p);
​
    println!("{:?}", p.get_x());
​
    p.set_x(20);
    println!("{:?}", p);
}

关联函数

impl 除了能为结构体添加方法外,还能添加关联函数(associated function )。

关联函数和方法的区别是:

  • 关联函数不用操作结构体的数据,也就不用接收 &self 作为参数
  • 关联函数的调用使用双冒号 ::

通常会使用关联函数为结构体创建一个构造函数,还是以上面的 Point 结构体为例:

impl Point {
    // 构造方法
    fn new(x: u32, y: u32) -> Point {
        Point { x, y }
    }
}
​
fn main() {
    let p = Point::new(10, 10);
    println!("{:?}", p);
}

前面学习字符串类型时,使用 String::from 来创建一个字符串实例,from 就是 String 的关联函数。还可以使用 String::new 创建一个空的字符串实例。

小结

本文介绍了 Rust 中函数在不同情境下的使用。本质上函数,方法,关联函数,都是函数。在结构体中函数可以分为方法和关联函数,方法是用来操作结构体数据的,关联函数用来实现和结构体本身无关的逻辑。

转载自:https://juejin.cn/post/7157160869758468126
评论
请登录