Merge pull request #841 from lkmcfj/patch-2

fix misleading expression in deref.md
pull/842/head
Sunface 3 years ago committed by GitHub
commit 382f211538
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -126,7 +126,7 @@ impl<T> Deref for MyBox<T> {
很简单,当解引用 `MyBox` 智能指针时,返回元组结构体中的元素 `&self.0`,有几点要注意的:
- 为了可读性,我们声明了关联类型 `Target`
- `Deref` 特征中声明了关联类型 `Target`,在之前章节中介绍过,关联类型主要是为了提升代码可读性
- `deref` 返回的是一个常规引用,可以被 `*` 进行解引用
之前报错的代码此时已能顺利编译通过。当然,标准库实现的智能指针要考虑很多边边角角情况,肯定比我们的实现要复杂。
@ -147,7 +147,7 @@ impl<T> Deref for MyBox<T> {
## 函数和方法中的隐式 Deref 转换
在函数和方法中Rust 提供了一个极其有用的隐式转换:`Deref `转换。简单来说,当一个实现了 `Deref` 特征的值被传给函数或方法时,会根据函数参数的要求,来决定使用该值原本的类型还是 `Deref` 后的类型,例如:
对于函数和方法的传参Rust 提供了一个极其有用的隐式转换:`Deref `转换。若一个类型实现了 `Deref` 特征,那它的引用在传给函数或方法时,会根据参数签名来决定是否进行隐式的 `Deref` 转换,例如:
```rust
fn main() {
@ -162,8 +162,8 @@ fn display(s: &str) {
以上代码有几点值得注意:
- `String` 实现了 `Deref` 特征,能被转换成一个 `&str`
- `s` 是一个 `String` 类型,当它被传给 `display` 函数时,自动通过 `Deref` 转换成了 `&str`
- `String` 实现了 `Deref` 特征,可以在需要时自动被转换为 `&str` 类型
- `&s` 是一个 `&String` 类型,当它被传给 `display` 函数时,自动通过 `Deref` 转换成了 `&str`
- 必须使用 `&s` 的方式来触发 `Deref`(仅引用类型的实参才会触发自动解引用)
#### 连续的隐式 Deref 转换

Loading…
Cancel
Save