[易学易懂系列|rustlang语言|零基础|快速入门|(11)|Structs结构体]

释放双眼,带上耳机,听听看~!

[易学易懂系列|rustlang语言|零基础|快速入门|(11)]

有意思的基础知识

Structs

我们今天来看看数据结构:structs.

简单来说,structs,就是用来封装相关数据的一种数据类型。

一般来说, struct 的命名方式为驼峰方式如: CamelCase

在Rust有以下几种定义struct的方式:

  1. C-like structs (C语言形式的struct)
  2. Tuple structs (元组形式的struct)
  3. Unit structs (单元struct)

在Rust,面向对象抽象,一般由struct和trait(特征)来实现,即structs来

封装属性数据,而trait用来封装方式,再由impl来关联。

我们来看看代码:

C语言形式的struct


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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1// Struct Declaration
2struct Color {
3    red: u8,
4    green: u8,
5    blue: u8
6}
7
8fn main() {
9  // Creating an instance
10  let black = Color {red: 0, green: 0, blue: 0};
11
12  // Accessing its fields using dot notation
13  println!("Black = rgb({}, {}, {})", black.red, black.green, black.blue); //Black = rgb(0, 0, 0)
14
15  // Structs are immutable by default, use `mut` to make it mutable but doesn't support field level mutability
16  let mut link_color = Color {red: 0,green: 0,blue: 255};
17  link_color.blue = 238;
18  println!("Link Color = rgb({}, {}, {})", link_color.red, link_color.green, link_color.blue); //Link Color = rgb(0, 0, 238)
19
20  // Copy elements from another instance
21  let blue = Color {blue: 255, .. link_color};
22  println!("Blue = rgb({}, {}, {})", blue.red, blue.green, blue.blue); //Blue = rgb(0, 0, 255)
23
24  // Destructure the instance using a `let` binding, this will not destruct blue instance
25  let Color {red: r, green: g, blue: b} = blue;
26  println!("Blue = rgb({}, {}, {})", r, g, b); //Blue = rgb(0, 0, 255)
27
28  // Creating an instance via functions & accessing its fields
29  let midnightblue = get_midnightblue_color();
30  println!("Midnight Blue = rgb({}, {}, {})", midnightblue.red, midnightblue.green, midnightblue.blue); //Midnight Blue = rgb(25, 25, 112)
31
32  // Destructure the instance using a `let` binding
33  let Color {red: r, green: g, blue: b} = get_midnightblue_color();
34  println!("Midnight Blue = rgb({}, {}, {})", r, g, b); //Midnight Blue = rgb(25, 25, 112)
35}
36
37fn get_midnightblue_color() -> Color {
38    Color {red: 25, green: 25, blue: 112}
39}
40

元组形式的struct


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1struct Color(u8, u8, u8);
2struct Kilometers(i32);
3
4fn main() {
5  // Creating an instance
6  let black = Color(0, 0, 0);
7
8  // Destructure the instance using a `let` binding, this will not destruct black instance
9  let Color(r, g, b) = black;
10  println!("Black = rgb({}, {}, {})", r, g, b); //black = rgb(0, 0, 0);
11
12  // Newtype pattern
13  let distance = Kilometers(20);
14  // Destructure the instance using a `let` binding
15  let Kilometers(distance_in_km) = distance;
16  println!("The distance: {} km", distance_in_km); //The distance: 20 km
17}
18

单元struct


1
2
3
4
5
6
1struct Electron;
2
3fn main() {
4  let x = Electron;
5}
6

以上,希望对你有用。


1
2
1如果遇到什么问题,欢迎加入:rust新手群,在这里我可以提供一些简单的帮助,加微信:360369487,注明:博客园+rust
2

https://learning-rust.github.io/docs/b2.structs.html

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C++ lambda表达式

2022-1-11 12:36:11

安全运维

Dockerfile 最佳实践

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索