From ee213aecb57843e1abf82110aee72b93b6bf35c2 Mon Sep 17 00:00:00 2001 From: glud123 Date: Wed, 26 Jan 2022 11:21:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AF=AD=E5=8F=A5=E4=B8=8D=E9=80=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- book/contents/basic/converse.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/contents/basic/converse.md b/book/contents/basic/converse.md index 73a01166..e1905c75 100644 --- a/book/contents/basic/converse.md +++ b/book/contents/basic/converse.md @@ -163,7 +163,7 @@ error[E0277]: the trait bound `&mut i32: Trait` is not satisfied 再进一步,我们使用[完全限定语法](https://course.rs/basic/trait/advance-trait.html#完全限定语法)来进行准确的函数调用: 1. 首先,编译器检查它是否可以直接调用 `T::foo(value)`,称之为**值方法调用** -2. 如果上一步调用无法完成(例如方法类型错误或者特征没有针对 `Self` 进行实现,上文提到过特征不能进行强制转换),那么编译器会尝试增加自动引用,以为着编译器会尝试以下调用: `<&T>::foo(value)` 和 `<&mut T>::foo(value)`,称之为**引用方法调用** +2. 如果上一步调用无法完成(例如方法类型错误或者特征没有针对 `Self` 进行实现,上文提到过特征不能进行强制转换),那么编译器会尝试增加自动引用,编译器会尝试以下调用: `<&T>::foo(value)` 和 `<&mut T>::foo(value)`,称之为**引用方法调用** 3. 若上面两个方法依然不工作,编译器会试着解引用 `T` ,然后再进行尝试。这里使用了 `Deref` 特征 —— 若 `T: Deref` (`T` 可以被解引用为 `U`),那么编译器会使用 `U` 类型进行尝试,称之为**解引用方法调用** 4. 若 `T` 不能被解引用,且 `T` 是一个定长类型(在编译器类型长度是已知的),那么编译器也会尝试将 `T` 从定长类型转为不定长类型,例如将 `[i32; 2]` 转为 `[i32]` 5. 若还是不行,那...没有那了,最后编译器大喊一声:汝欺我甚,不干了!