Rust学习教程23 - 方法Method

本文介绍了Rust中的方法定义,包括方法名与结构体字段名相同的情况,无运算符调用方法,带有多个参数的方法,关联函数,以及如何为枚举和结构体实现方法。强调了方法在Rust中的作用,以及与所有权规则的关系,提供了提高代码组织性和内聚性的实践指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文节选自<<Rust语言圣经>>一书
欢迎大家加入Rust编程学院,一起学习交流:
QQ群:1009730433

方法Method

从面向对象语言过来的同学对于方法肯定不陌生,class里面就充斥着方法的概念,在Rust中方法的概念也大差不差,往往和对象成对出现:

object.method()

例如读取一个文件写入缓冲区,如果用函数的写法read(f,buffer),用方法的写法f.read(buffer). 不过与其它语言class跟方法的联动使用不同,Rust的方法往往跟结构体、枚举、特征一起使用,特征将在后面几章进行介绍。

定义方法

Rust使用impl来定义方法,例如以下代码:

struct Circle {
   
   
    x: f64,
    y: f64,
    radius: f64,
}

impl Circle {
   
   
    // new是Circle的关联函数,因为它的第一个参数不是self
    // 这种方法往往用于初始化当前结构体的实例
    fn new(x: f64, y: f64, radius: f64) -> Circle {
   
   
        Circle {
   
   
            x: x,
            y: y,
            radius: radius,
        }
    }

    // Circle的方法,&self表示借用当前的Circle结构体
    fn area(&self) -> f64 {
   
   
        std::f64::consts::PI * (self.radius * self.radius)
    }
}

我们这里先不详细展开讲解,首先建立对方法定义的大致印象。下面图片将Rust方法定义与其它语言的方法定义做一下对比:

可以看出,其它语言中所有定义都在class中,但是Rust的对象定义和方法定义是分离的,这种数据和使用分离的方式,会给予使用者极高的灵活度。

再来看一个例子:

#[derive(Debug)]
struct Rectangle {
   
   
    width: u32,
    height: u32,
}

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

fn main() {
   
   
    let rect1 = Rectangle {
   
    width: 30, height: 50 };

    println!(
        "The area of the rectangle is {} square pi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值