枚举类型

结构体

在Rust中,Self和self有不同的含义和用途。
  1. Self是一个类型别名,它代表了当前实现块(impl)所关联的类型。在你的代码中,Self就代表了Drink类型。 可以在方法返回类型或者关联函数中使用Self,来表示返回当前类型的实例。
  1. self是方法的第一个参数,它代表了调用该方法的实例。 self可以有三种形式:self,&self和&mut self,分别代表了值、引用和可变引用

结构体与所有权

每当将值从一个位置传递到另一个位置时,borrow checker都会重新评估所有权。
  1. Immutable Borrow使用不可变的借用,值的所有权仍归发送方所有,接收方直接接收对该值的引用
而不是该值的副本。但是,他们不能使用该引用来修改它指向的值,编译器不允许这样做。释放资源的
责任仍由发送方承担。仅当发件人本身超出范围时,才会删除该值
  1. Mutable Borrow使用可变的借用所有权和删除值的责任也由发送者承担。但是接收方能够通过他们
接收的引用来修改该值。
  1. Move这是所有权从一个地点转移到另一个地点。borrow checker关于释放该值的决定将由该值的接
收者(而不是发送者)通知。由于所有权已从发送方转移到接收方,因此发送方在将引用移动到另一个
上下文后不能再使用该引用,发送方在移动后对vlaue的任何使用都会导致错误。

堆栈与copy和move

Box:智能指针

Box是一个智能指针,它提供对堆分配内存的所有权。它允许你将数据存储在堆上
而不是栈上,并且在复制或移动时保持对数据的唯一拥有权。使用Box可以避免一
些内存管理问题,如悬垂指针和重复释放。
  1. 所有权转移
  1. 释放内存
  1. 解引用
  1. 构建递归数据结构

copy与clone

Move:所有权转移
Clone:深拷贝
Copy:Copy是在Cl one的基础建立的narker trait(Rust中最类似继承的关系)
  1. trait(特质)是一种定义共享行为的机制。Cl one也是特质
  1. marker trait是一个没有任何方法的trait,它主要用于向编译器传递某些信息,以改变类型的默认行为

堆和栈与Copy和Move

stack
1. 基础类型 2. tuple和array 3. struct与枚举等也是存储在栈上如果属性有String等在堆上的数据类型会有指向堆的
heap
Box Rc String/Vec等
一般来说在栈上的数据类型都默认copy,但struct等默认为move,需要Copy只需要设置数据类型实现Copy特质即可,或是调用CI one函数(需要实现Clone特质)

if 与 match

循环与break、continue以及迭代的区别

  1. break关键字用于立即终止循环,并跳出循环体
    1. 可以用于跳出指定标签循环
  1. continue关键字用于立即跳过当前循环中剩余的代码,直接进入下一次循环
loop 为无限循环

函数

函数基础与copy值

1. Struct、枚举、集合等并没有实现Copy trait,会实现move操作失去所有权 2. 为数据类型实现Copy trait,就可实现Copy by value

函数不可变借用、可变借用

函数返回值与所有权机制

返回Copy与Non-Copy
都可以返回,但是要注意Non-Copy是在堆上的
性能:
在一般情况下,返回Copy类型的值通常具有更好的性能。这是因为Copy类型
的值是通过复制进行返回的,而不涉及堆上内存的分配和释放,通常是在栈上分配。
这样的操作比涉及堆上内存的分配和释放更为高效。
返回引用
  • 在只有传入一个引用参数,只有一个返回引用时,生命周期不需要声明
  • 其他情况下需要声明引用的生命周期
  • 慎用‘static

高阶函数(函数作为参数与返回值)

  1. map函数:map函数可以用于对一个集合中的每个元素应用一个函数,并
返回包含结果的新集合。
  1. filteri函数:filter函数用于过滤集合中的元素,根据一个谓词函数的
返回值。
  1. fold:fold函数(有时也称为reduce)可以用于迭代集合的每个元素,
并将它们累积到一个单一的结果中。

错误处理

Rust中的错误可以分为两种
  • Recoverable error:有返回类型
    • 返回Result类型
    • 返回opt ion类型
  • Unrecoverable type:没有返回类型,直接崩溃
    • panic macro将终止当前线程

Result、Option 和 panic!宏

notion image
notion image

错误结果处理: unwrap() 与 "?"

notion image
notion image
notion image

自定义 Error 类型

1. 定义错误类型结构体:创建一个结构体来表示你的错误类型,通常包含一些字段来描述错误的详细信息。 2. 实现std::fmt::Display trait: 实现这个trait以定义如何展示错误信息。这是为了使错误能够以人类可读的方式打印出来。 3. 实现std:error::Error trait: 实现这个trait以满足Rust的错误处理机制的要求。

借用与生命周期

notion image
notion image

生命周期与函数

悬垂引用

notion image

编译器推断生命周期三个规则

notion image

生命周期与结构体

  • 在结构体中的引用需要标注生命周期
  • 结构体的方法(&self等)不需要标注生命周期
所有权与结构体HOOK
Loading...