|
|
@ -2,7 +2,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
> [ch10-00-generics.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch10-00-generics.md)
|
|
|
|
> [ch10-00-generics.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch10-00-generics.md)
|
|
|
|
> <br>
|
|
|
|
> <br>
|
|
|
|
> commit f65676e17d7fc4c0c7cd7275a7bf15447364831a
|
|
|
|
> commit 9e8d1ed7a1732d9cc09606a9b62ee8838998502f
|
|
|
|
|
|
|
|
|
|
|
|
每一个编程语言都有高效的处理重复概念的工具;在 Rust 中其工具之一就是 **泛型**(*generics*)。泛型是具体类型或其他属性的抽象替代。我们可以表达泛型的属性,比如他们的行为或如何与其他泛型相关联,而不需要在编写和编译代码时知道他们在这里实际上代表什么。
|
|
|
|
每一个编程语言都有高效的处理重复概念的工具;在 Rust 中其工具之一就是 **泛型**(*generics*)。泛型是具体类型或其他属性的抽象替代。我们可以表达泛型的属性,比如他们的行为或如何与其他泛型相关联,而不需要在编写和编译代码时知道他们在这里实际上代表什么。
|
|
|
|
|
|
|
|
|
|
|
@ -125,8 +125,8 @@ fn main() {
|
|
|
|
|
|
|
|
|
|
|
|
1. 我们注意到了重复代码。
|
|
|
|
1. 我们注意到了重复代码。
|
|
|
|
2. 我们将重复代码提取到了一个函数中,并在函数签名中指定了代码中的输入和返回值。
|
|
|
|
2. 我们将重复代码提取到了一个函数中,并在函数签名中指定了代码中的输入和返回值。
|
|
|
|
3. 我们将两个具体的存在重复代码的位置替换为了函数调用。
|
|
|
|
3. 我们将重复代码的两个实例,改为调用函数。
|
|
|
|
|
|
|
|
|
|
|
|
在不同的场景使用不同的方式,我们也可以利用相同的步骤和泛型来减少重复代码。与函数体中现在作用于一个抽象的 `list` 而不是具体值一样,使用泛型的代码也会作用于抽象类型。支持泛型背后的概念与你已经了解的支持函数的概念是一样的,不过是实现方式不同。
|
|
|
|
在不同的场景使用不同的方式,我们也可以利用相同的步骤和泛型来减少重复代码。与函数体可以在抽象`list`而不是特定值上操作的方式相同,泛型允许代码对抽象类型进行操作。
|
|
|
|
|
|
|
|
|
|
|
|
如果我们有两个函数,一个寻找一个 `i32` 值的 slice 中的最大项而另一个寻找 `char` 值的 slice 中的最大项该怎么办?该如何消除重复呢?让我们拭目以待!
|
|
|
|
如果我们有两个函数,一个寻找一个 `i32` 值的 slice 中的最大项而另一个寻找 `char` 值的 slice 中的最大项该怎么办?该如何消除重复呢?让我们拭目以待!
|