mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2024-11-14 21:11:31 +08:00
Merge branch 'master' of https://github.com/xiaohulu/trpl-zh-cn
This commit is contained in:
commit
13aadff1c8
@ -6,7 +6,7 @@
|
||||
|
||||
另一个没有所有权的数据类型是 *slice*。slice 允许你引用集合中一段连续的元素序列,而不用引用整个集合。
|
||||
|
||||
这里有一个小的编程问题:编写一个获取一个字符串并返回它在其中找到的第一个单词的函数。如果函数没有在字符串中找到一个空格,就意味着整个字符串是一个单词,所以整个字符串都应返回。
|
||||
这里有一个编程小问题:编写一个函数,该函数接收一个字符串,并返回在该字符串中找到的第一个单词。如果函数在该字符串中并未找到空格,则意味着整个字符串是一个单词,所以应该返回整个字符串。
|
||||
|
||||
让我们考虑一下这个函数的声明:
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
> [ch10-00-generics.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch10-00-generics.md)
|
||||
> <br>
|
||||
> commit f65676e17d7fc4c0c7cd7275a7bf15447364831a
|
||||
> commit 9e8d1ed7a1732d9cc09606a9b62ee8838998502f
|
||||
|
||||
每一个编程语言都有高效的处理重复概念的工具;在 Rust 中其工具之一就是 **泛型**(*generics*)。泛型是具体类型或其他属性的抽象替代。我们可以表达泛型的属性,比如他们的行为或如何与其他泛型相关联,而不需要在编写和编译代码时知道他们在这里实际上代表什么。
|
||||
|
||||
@ -125,8 +125,8 @@ fn main() {
|
||||
|
||||
1. 我们注意到了重复代码。
|
||||
2. 我们将重复代码提取到了一个函数中,并在函数签名中指定了代码中的输入和返回值。
|
||||
3. 我们将两个具体的存在重复代码的位置替换为了函数调用。
|
||||
3. 我们将重复代码的两个实例,改为调用函数。
|
||||
|
||||
在不同的场景使用不同的方式,我们也可以利用相同的步骤和泛型来减少重复代码。与函数体中现在作用于一个抽象的 `list` 而不是具体值一样,使用泛型的代码也会作用于抽象类型。支持泛型背后的概念与你已经了解的支持函数的概念是一样的,不过是实现方式不同。
|
||||
在不同的场景使用不同的方式,我们也可以利用相同的步骤和泛型来减少重复代码。与函数体可以在抽象`list`而不是特定值上操作的方式相同,泛型允许代码对抽象类型进行操作。
|
||||
|
||||
如果我们有两个函数,一个寻找一个 `i32` 值的 slice 中的最大项而另一个寻找 `char` 值的 slice 中的最大项该怎么办?该如何消除重复呢?让我们拭目以待!
|
@ -2,9 +2,9 @@
|
||||
|
||||
> [ch10-01-syntax.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch10-01-syntax.md)
|
||||
> <br>
|
||||
> commit 56352c28cf3fe0402fa5a7cba73890e314d720eb
|
||||
> commit 9e8d1ed7a1732d9cc09606a9b62ee8838998502f
|
||||
|
||||
泛型用于通常我们放置类型的位置,比如函数签名或结构体,允许我们创建可以代替许多具体数据类型的结构体定义。让我们看看如何使用泛型定义函数、结构体、枚举和方法,并且在本部分的结尾我们会讨论泛型代码的性能。
|
||||
泛型用于为函数签名或结构体等创建定义,允许我们创建许多不同的具体数据类型。让我们看看如何使用泛型定义函数、结构体、枚举和方法,然后我们将讨论泛型如何影响代码性能。
|
||||
|
||||
### 在函数定义中使用泛型
|
||||
|
||||
@ -198,7 +198,7 @@ fn main() {
|
||||
|
||||
<span class="caption">示例 10-8:使用两个泛型的 `Point`,这样 `x` 和 `y` 可能是不同类型</span>
|
||||
|
||||
现在所有这些 `Point` 实例都是被允许的了!你可以在定义中使用任意多的泛型类型参数,不过太多的话代码将难以阅读和理解。如果你处于一个需要很多泛型类型的位置,这可能是一个需要重新组织代码并分隔成一些更小部分的信号。
|
||||
现在所有这些 `Point` 实例都是被允许的了!你可以在定义中使用任意多的泛型类型参数,不过太多的话代码将难以阅读和理解。当你的代码中需要许多泛型类型时,它可能表明你的代码需要重组为更小的部分。
|
||||
|
||||
### 枚举定义中的泛型数据类型
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user