欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 【Rust】结构体的方法语法

【Rust】结构体的方法语法

2025/6/6 15:00:55 来源:https://blog.csdn.net/qq_61867911/article/details/145079672  浏览:    关键词:【Rust】结构体的方法语法

目录

思维导图

1. 方法语法概述

2. 方法与函数的区别

2.1 示例:定义方法

3. 方法的参数

3.1 示例:带参数的方法

4. 关联函数

4.1 示例:关联函数

5. 多个impl块

5.1 示例


思维导图

1. 方法语法概述

  • 方法是定义在结构体、枚举或特征对象(trait object)中的函数,与特定类型实例相关联。

  • 方法的第一个参数总是self,表示方法被调用的实例。self可以是以下三种形式之一: 

  1. &self:不可变借用,表示方法不会修改实例。

  2. &mut self:可变借用,表示方法可能会修改实例。

  3. self:获取所有权,表示方法会消耗实例。

  • 方法通过impl(实现)块定义,所有在该块内的内容都与指定的类型相关联。

2. 方法与函数的区别

  • 方法总是与某个类型实例相关联,调用语法为实例.方法名(参数)

  • 函数是独立的,调用语法为函数名(参数)

2.1 示例:定义方法

以下示例展示了如何在Rectangle结构体上定义area方法,计算矩形的面积。

#[derive(Debug)]
struct Rectangle {width: u32,height: u32,
}impl Rectangle {// 定义方法:计算面积fn area(&self) -> u32 {self.width * self.height}
}fn main() {let rect = Rectangle {width: 30,height: 50,};println!("The area of the rectangle is {} square pixels.", rect.area());
}

输出结果: 

The area of the rectangle is 1500 square pixels.

3. 方法的参数

  • 方法可以有多个参数,除了第一个self参数外,其他参数与函数的参数定义方式相同。

  • 以下示例定义了can_hold方法,用于判断一个矩形是否可以容纳另一个矩形。

3.1 示例:带参数的方法

#[derive(Debug)]
struct Rectangle {width: u32,height: u32,
}impl Rectangle {// 定义方法:判断当前矩形是否可以容纳另一个矩形fn can_hold(&self, other: &Rectangle) -> bool {self.width > other.width && self.height > other.height}
}fn main() {let rect1 = Rectangle {width: 30,height: 50,};let rect2 = Rectangle {width: 20,height: 40,};println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2));
}

输出结果: 

Can rect1 hold rect2? true

4. 关联函数

  • 关联函数是定义在impl块内但不需要self参数的函数,通常用于构造函数。

  • 关联函数通过类型名::函数名的方式调用。

4.1 示例:关联函数

#[derive(Debug)]
struct Rectangle {width: u32,height: u32,
}impl Rectangle {// 定义关联函数:创建一个正方形矩形fn square(size: u32) -> Self {Self {width: size,height: size,}}
}fn main() {let square = Rectangle::square(10);println!("Square: {:?}", square);
}

输出结果: 

Square: Rectangle { width: 10, height: 10 }

5. 多个impl块

  • Rust允许为同一结构体定义多个impl块,这在某些情况下是有用的,例如为不同的功能组织代码。

5.1 示例:多个impl块

#[derive(Debug)]
struct Rectangle {width: u32,height: u32,
}impl Rectangle {// 定义方法:计算面积fn area(&self) -> u32 {self.width * self.height}
}impl Rectangle {// 定义方法:判断当前矩形是否可以容纳另一个矩形fn can_hold(&self, other: &Rectangle) -> bool {self.width > other.width && self.height > other.height}
}fn main() {let rect1 = Rectangle {width: 30,height: 50,};let rect2 = Rectangle {width: 20,height: 40,};println!("Area of rect1: {}", rect1.area());println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2));
}

输出结果: 

Area of rect1: 1500
Can rect1 hold rect2? true

tips:

  • 方法第一个参数总是 self,可选 &self&mut selfself
  • 方法通过 impl 块定义,调用语法为 实例.方法名(参数)
  • 关联函数不含 self 参数,调用语法为 类型名::函数名
  • Rust允许为同一结构体定义多个 impl 块。

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词