🐞 fix: 修复错误解析的泛型标签

pull/860/head
glatavento 3 years ago
parent cfc2f5f779
commit 70b333862c

@ -149,7 +149,7 @@ error[E0277]: `Rc<Mutex<i32>>` cannot be sent between threads safely
错误中提到了一个关键点:`Rc<T>`无法在线程中传输,因为它没有实现`Send`特征(在下一节将详细介绍),而该特征可以确保数据在线程中安全的传输。
##### 多线程安全的 Arc<T>
##### 多线程安全的 `Arc<T>`
好在,我们有`Arc<T>`,得益于它的[内部计数器](https://course.rs/advance/smart-pointer/rc-arc.html#多线程无力的rc)是多线程安全的,因此可以在多线程环境中使用:

@ -521,7 +521,7 @@ fn render() -> Result<String, std::io::Error> {
下面依次来看看相关的解决方式。
#### Box<dyn Error>
#### `Box<dyn Error>`
大家还记得我们之前提到的 `std::error::Error` 特征吧,当时有说:自定义类型实现 `Debug + Display` 特征的主要原因就是为了能转换成 `Error` 的特征对象,而特征对象恰恰是在同一个地方使用不同类型的关键:

@ -102,7 +102,7 @@ fn generic<T: ?Sized>(t: &T) {
`?Sized` 特征用于表明类型 `T` 既有可能是固定大小的类型,也可能是动态大小的类型。还有一点要注意的是,函数参数类型从 `T` 变成了 `&T`,因为 `T` 可能是动态大小的,因此需要用一个固定大小的指针(引用)来包裹它。
## Box<str>
## `Box<str>`
在结束前,再来看看之前遗留的问题:使用 `Box` 可以将一个动态大小的特征变成一个具有固定大小的特征对象,能否故技重施,将 `str` 封装成一个固定大小类型?

@ -9,7 +9,7 @@ Rust 所有权机制要求一个值只能有一个所有者,在大多数情况
这种实现机制就是 `Rc``Arc`,前者适用于单线程,后者适用于多线程。由于二者大部分情况下都相同,因此本章将以 `Rc` 作为讲解主体,对于 `Arc` 的不同之处,另外进行单独讲解。
## Rc<T>
## `Rc<T>`
引用计数(reference counting),顾名思义,通过记录一个数据被引用的次数来确定该数据是否正在被使用。当引用次数归零时,就代表该数据不再被使用,因此可以被清理释放。
@ -144,7 +144,7 @@ fn main() {
- `Rc` 只能用于同一线程内部,想要用于线程之间的对象共享,你需要使用 `Arc`
- `Rc<T>` 是一个智能指针,实现了 `Deref` 特征,因此你无需先解开 `Rc` 指针,再使用里面的 `T`,而是可以直接使用 `T`,例如上例中的 `gadget1.owner.name`
## 多线程无力的 Rc<T>
## 多线程无力的 `Rc<T>`
来看看在多线程场景使用 `Rc<T>` 会如何:

Loading…
Cancel
Save