pull/107/head
sunface 3 years ago
commit 91b04753b9

@ -378,7 +378,7 @@ fn main() {
} }
``` ```
如果并不希望限制 `largest` 函数只能用于实现了 `Copy` 特征的类型,我们可以在 `T` 的特征约束中指定 [`Clone`特征](../ownership/ownership.md#克隆(深拷贝)) 而不是 `Copy`特征。并克隆`list`中国呢的每一个值使得 `largest` 函数拥有其所有权。使用 `clone` 函数意味着对于类似 String 这样拥有堆上数据的类型,会潜在的分配更多堆上空间,而堆分配在涉及大量数据时可能会相当缓慢。 如果并不希望限制 `largest` 函数只能用于实现了 `Copy` 特征的类型,我们可以在 `T` 的特征约束中指定 [`Clone`特征](../ownership/ownership.md#克隆(深拷贝)) 而不是 `Copy`特征。并克隆`list`中的每一个值使得 `largest` 函数拥有其所有权。使用 `clone` 函数意味着对于类似 String 这样拥有堆上数据的类型,会潜在的分配更多堆上空间,而堆分配在涉及大量数据时可能会相当缓慢。
另一种 `largest` 的实现方式是返回在 `list``T` 值的引用。如果我们将函数返回值从 `T` 改为 `&T` 并改变函数体使其能够返回一个引用,我们将不需要任何 `Clone``Copy` 的特征约束而且也不会有任何的堆分配。尝试自己实现这种替代解决方式吧! 另一种 `largest` 的实现方式是返回在 `list``T` 值的引用。如果我们将函数返回值从 `T` 改为 `&T` 并改变函数体使其能够返回一个引用,我们将不需要任何 `Clone``Copy` 的特征约束而且也不会有任何的堆分配。尝试自己实现这种替代解决方式吧!

Loading…
Cancel
Save