diff --git a/contents/basic/converse.md b/contents/basic/converse.md index 7221ca52..5f0096c4 100644 --- a/contents/basic/converse.md +++ b/contents/basic/converse.md @@ -202,7 +202,7 @@ fn do_stuff(value: &T) { 首先,从直觉上来说,该方法会报错,因为 `T` 没有实现 `Clone` 特征,但是真实情况是什么呢? -我们先来推导一番。 首先通过值方法调用就不再可行,因为 `T` 没有实现 `Clone` 特征,也就无法调用 `T` 的 `clone` 方法。接着编译器尝试**引用方法调用**,此时 `T` 变成 `&T`,在这种情况下, `clone` 方法的签名如下: `fn clone(&&T) -> &T`,接着我们现在对 `value` 进行了引用。 编译器发现 `&T` 实现了 `Clone` 类型(所有的引用类型都可以被复制,因为其实就是复制一份地址),因此可以可以推出 `cloned` 也是 `&T` 类型。 +我们先来推导一番。 首先通过值方法调用就不再可行,因为 `T` 没有实现 `Clone` 特征,也就无法调用 `T` 的 `clone` 方法。接着编译器尝试**引用方法调用**,此时 `T` 变成 `&T`,在这种情况下, `clone` 方法的签名如下: `fn clone(&&T) -> &T`,接着我们现在对 `value` 进行了引用。 编译器发现 `&T` 实现了 `Clone` 类型(所有的引用类型都可以被复制,因为其实就是复制一份地址),因此可以推出 `cloned` 也是 `&T` 类型。 最终,我们复制出一份引用指针,这很合理,因为值类型 `T` 没有实现 `Clone`,只能去复制一个指针了。