HGQ's blog HGQ's blog
🏠首页
📚学习笔记
💻技术
  • 😋碎碎念
  • 🏞美好瞬间
🙈关于
  • 分类
  • 标签
  • 归档
  • 前端网站
  • 后端网站
  • 其他
🔗友链
GitHub (opens new window)

HuangGaoQing

一名程序员
🏠首页
📚学习笔记
💻技术
  • 😋碎碎念
  • 🏞美好瞬间
🙈关于
  • 分类
  • 标签
  • 归档
  • 前端网站
  • 后端网站
  • 其他
🔗友链
GitHub (opens new window)
  • 前端

  • rust

    • rust struct
      • struct
        • 创建/使用语法
        • 创建结构体
        • 实例化结构体
        • 更新语法
        • 更改某个字段
        • 根据某个结构体创建新的结构体
      • Tuple struct
        • 创建/使用
      • 🌰 小例子
        • 求长方形的面积
      • struct 方法
        • 使用方法改进上面例子
      • struct关联函数(static)
    • rust 枚举
    • Package, Crate, Moudle
  • 学习笔记
  • rust
huanggaoqing
2023-10-28
目录

rust struct

# struct

# 创建/使用语法

# 创建结构体

struct User<'a> {
  name: &'a str,
  age: i32,
  email: &'a str
}
1
2
3
4
5

# 实例化结构体

let user = User {
  name: "HGQ",
  age: 21,
  email: "huanggaoqing0119@gmail.com"
};
1
2
3
4
5

# 更新语法

# 更改某个字段

想要更改结构体字段的话,结构体必须是可以变的。

let mut user = User {
  name: "HGQ",
  age: 21,
  email: "huanggaoqing0119@gmail.com"
};
1
2
3
4
5
user.email = "huanggaoqing0302@gmail.com";
1

# 根据某个结构体创建新的结构体

只有email字段改变了,其他字段都适用user结构体的

let user2 = User {
  email: "huanggaoqing0302@gmail.com",
  ..user
};
1
2
3
4

# Tuple struct

# 创建/使用

struct Color (i32, i32, i32);
1
let color = Color(0, 0, 0);
1

# 🌰 小例子

# 求长方形的面积

  1. 第一种方式:
let w = 16;
let h = 6;
println!("area: {}", area(w, h))
fn area(w: i32, h: i32) -> i32 {
  w * h
}
1
2
3
4
5
6

这种方式不好,原因是长方形的长宽应该存在联系的,现在这种方式,长和宽只是两个独立的变量,没有任何联系

  1. 第二种方式:
let rect = Rect {
  width: 16,
  height: 6
};
println!("area: {}", area(&rect))

fn area(r: &Rect) -> i32 {
  r.width * r.height
}
1
2
3
4
5
6
7
8
9

使用结构体将长和宽封装到一起,就可以让他们产生联系,并成为一体。

# struct 方法

# 使用方法改进上面例子

  • 在 impl 块中定义方法

  • impl 块可以写多个

  • 方法第一个参数是 &self 执行的是实例本身,也可以获得实例本身的所有权(self)或可变引用(& mut self)

    提示

    获取可变引用时,实例本身也要是可变的,这样才可以修改实例本身的值

  • 方法想要传递参数,直接在&self后面增加就可以

struct Rect {
  width: i32,
  height: i32
}
// 方法声明和定义
impl Rect {
	// 无参数
  fn area(&self) -> i32 {
    self.width * self.height
  }
  // 有参数
  fn can_hold(&self, other: &Rect) -> bool {
    self.width >= other.width && self.height >= other.height
  }
}

// 方法调用
println!("area: {}", rect.area())

// 有参数方法调用
let rect2 = Rect {
  width: 10,
  height: 3
};
println!("can: {}", rect.can_hold(&rect2))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

这样就可以把求长方形面积的方法和长方形的结构体关联起来,更加的合乎逻辑。

# struct关联函数(static)

提示

相当于是静态方法

// 创建
struct Rect {
  width: i32,
  height: i32
}
impl Rect {
  fn new(width: i32, height: i32) -> Rect {
    Rect {
      width,
      height
    }
}

// 使用
let rect = Rect::new(16, 6);
let rect2 = Rect::new(10, 3);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
编辑 (opens new window)
#rust
上次更新: 2024/01/15, 02:08:26
vue源码分析(初始化渲染)
rust 枚举

← vue源码分析(初始化渲染) rust 枚举→

最近更新
01
Package, Crate, Moudle
11-05
02
其他
11-04
03
后端网站
11-04
更多文章>
Theme by Vdoing | Copyright © 2023-2024 HuangGaoQing | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式