ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【Rust】结构体的方法语法 [打印本页]

作者: 祗疼妳一个    时间: 昨天 18:39
标题: 【Rust】结构体的方法语法
目次
思维导图
1. 方法语法概述
2. 方法与函数的区别
2.1 示例:定义方法
3. 方法的参数
3.1 示例:带参数的方法
4. 关联函数
4.1 示例:关联函数
5. 多个impl块
5.1 示例



思维导图



1. 方法语法概述



2. 方法与函数的区别


2.1 示例:定义方法

以下示例展示了怎样在Rectangle结构体上定义area方法,盘算矩形的面积。
  1. #[derive(Debug)]
  2. struct Rectangle {
  3.     width: u32,
  4.     height: u32,
  5. }
  6. impl Rectangle {
  7.     // 定义方法:计算面积
  8.     fn area(&self) -> u32 {
  9.         self.width * self.height
  10.     }
  11. }
  12. fn main() {
  13.     let rect = Rectangle {
  14.         width: 30,
  15.         height: 50,
  16.     };
  17.     println!("The area of the rectangle is {} square pixels.", rect.area());
  18. }
复制代码
输出效果: 
  1. The area of the rectangle is 1500 square pixels.
复制代码
3. 方法的参数


3.1 示例:带参数的方法

  1. #[derive(Debug)]
  2. struct Rectangle {
  3.     width: u32,
  4.     height: u32,
  5. }
  6. impl Rectangle {
  7.     // 定义方法:判断当前矩形是否可以容纳另一个矩形
  8.     fn can_hold(&self, other: &Rectangle) -> bool {
  9.         self.width > other.width && self.height > other.height
  10.     }
  11. }
  12. fn main() {
  13.     let rect1 = Rectangle {
  14.         width: 30,
  15.         height: 50,
  16.     };
  17.     let rect2 = Rectangle {
  18.         width: 20,
  19.         height: 40,
  20.     };
  21.     println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2));
  22. }
复制代码
输出效果: 
  1. Can rect1 hold rect2? true
复制代码
4. 关联函数


4.1 示例:关联函数

  1. #[derive(Debug)]
  2. struct Rectangle {
  3.     width: u32,
  4.     height: u32,
  5. }
  6. impl Rectangle {
  7.     // 定义关联函数:创建一个正方形矩形
  8.     fn square(size: u32) -> Self {
  9.         Self {
  10.             width: size,
  11.             height: size,
  12.         }
  13.     }
  14. }
  15. fn main() {
  16.     let square = Rectangle::square(10);
  17.     println!("Square: {:?}", square);
  18. }
复制代码
输出效果: 
  1. Square: Rectangle { width: 10, height: 10 }
复制代码
5. 多个impl块


5.1 示例:多个impl块

  1. #[derive(Debug)]
  2. struct Rectangle {
  3.     width: u32,
  4.     height: u32,
  5. }
  6. impl Rectangle {
  7.     // 定义方法:计算面积
  8.     fn area(&self) -> u32 {
  9.         self.width * self.height
  10.     }
  11. }
  12. impl Rectangle {
  13.     // 定义方法:判断当前矩形是否可以容纳另一个矩形
  14.     fn can_hold(&self, other: &Rectangle) -> bool {
  15.         self.width > other.width && self.height > other.height
  16.     }
  17. }
  18. fn main() {
  19.     let rect1 = Rectangle {
  20.         width: 30,
  21.         height: 50,
  22.     };
  23.     let rect2 = Rectangle {
  24.         width: 20,
  25.         height: 40,
  26.     };
  27.     println!("Area of rect1: {}", rect1.area());
  28.     println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2));
  29. }
复制代码
输出效果: 
  1. Area of rect1: 1500
  2. Can rect1 hold rect2? true
复制代码

tips:



 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4