Skip to content

Commit 55ba33c

Browse files
committed
---
yaml --- r: 224822 b: refs/heads/tmp c: 4277369 h: refs/heads/master v: v3
1 parent b49e755 commit 55ba33c

File tree

3 files changed

+15
-12
lines changed

3 files changed

+15
-12
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ refs/tags/0.11.0: e1247cb1d0d681be034adb4b558b5a0c0d5720f9
2525
refs/tags/0.12.0: f0c419429ef30723ceaf6b42f9b5a2aeb5d2e2d1
2626
refs/heads/beta: 83dee3dfbb452a7558193f3ce171b3c60bf4a499
2727
refs/tags/1.0.0-alpha: e42bd6d93a1d3433c486200587f8f9e12590a4d7
28-
refs/heads/tmp: 556b0815d779a50a151c44032febf3ce253e621e
28+
refs/heads/tmp: 427736931bb1cd34c97e4e1f79a5a84430415207
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3030
refs/tags/homu-tmp: e58601ab085591c71a27ae82137fc313222c2270
3131
refs/tags/1.0.0-beta: 8cbb92b53468ee2b0c2d3eeb8567005953d40828

branches/tmp/src/doc/trpl/generics.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Generics are called ‘parametric polymorphism’ in type theory,
66
which means that they are types or functions that have multiple forms (‘poly’
77
is multiple, ‘morph’ is form) over a given parameter (‘parametric’).
88

9-
Anyway, enough with type theory, let’s check out some generic code. Rust’s
9+
Anyway, enough type theory, let’s check out some generic code. Rust’s
1010
standard library provides a type, `Option<T>`, that’s generic:
1111

1212
```rust
@@ -27,7 +27,7 @@ let x: Option<i32> = Some(5);
2727

2828
In the type declaration, we say `Option<i32>`. Note how similar this looks to
2929
`Option<T>`. So, in this particular `Option`, `T` has the value of `i32`. On
30-
the right-hand side of the binding, we do make a `Some(T)`, where `T` is `5`.
30+
the right-hand side of the binding, we make a `Some(T)`, where `T` is `5`.
3131
Since that’s an `i32`, the two sides match, and Rust is happy. If they didn’t
3232
match, we’d get an error:
3333

branches/tmp/src/doc/trpl/traits.md

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,11 @@ As you can see, the `trait` block looks very similar to the `impl` block,
4747
but we don’t define a body, just a type signature. When we `impl` a trait,
4848
we use `impl Trait for Item`, rather than just `impl Item`.
4949

50-
We can use traits to constrain our generics. Consider this function, which
51-
does not compile:
50+
## Traits bounds for generic functions
51+
52+
Traits are useful because they allow a type to make certain promises about its
53+
behavior. Generic functions can exploit this to constrain the types they
54+
accept. Consider this function, which does not compile:
5255

5356
```rust,ignore
5457
fn print_area<T>(shape: T) {
@@ -75,7 +78,7 @@ fn print_area<T: HasArea>(shape: T) {
7578
}
7679
```
7780

78-
The syntax `<T: HasArea>` means `any type that implements the HasArea trait`.
81+
The syntax `<T: HasArea>` means any type that implements the `HasArea` trait.”
7982
Because traits define function type signatures, we can be sure that any type
8083
which implements `HasArea` will have an `.area()` method.
8184

@@ -154,8 +157,8 @@ error: the trait `HasArea` is not implemented for the type `_` [E0277]
154157

155158
## Traits bounds for generic structs
156159

157-
Trait constraints also can apply to implementations for generic structs. Just
158-
append the constraint when you declare type parameters. Here is a new type
160+
Your generic structs can also benefit from trait constraints. All you need to
161+
do is append the constraint when you declare type parameters. Here is a new
159162
type `Rectangle<T>` and its operation `is_square()`:
160163

161164
```rust
@@ -232,7 +235,7 @@ impl HasArea for i32 {
232235
It is considered poor style to implement methods on such primitive types, even
233236
though it is possible.
234237

235-
This may seem like the Wild West, but there are two other restrictions around
238+
This may seem like the Wild West, but there are two restrictions around
236239
implementing traits that prevent this from getting out of hand. The first is
237240
that if the trait isn’t defined in your scope, it doesn’t apply. Here’s an
238241
example: the standard library provides a [`Write`][write] trait which adds
@@ -397,10 +400,10 @@ This shows off the additional feature of `where` clauses: they allow bounds
397400
where the left-hand side is an arbitrary type (`i32` in this case), not just a
398401
plain type parameter (like `T`).
399402

400-
## Default methods
403+
# Default methods
401404

402-
There’s one last feature of traits we should cover: default methods. It’s
403-
easiest just to show an example:
405+
If you already know how a typical implementor will define a method, you can
406+
let your trait supply a default:
404407

405408
```rust
406409
trait Foo {

0 commit comments

Comments
 (0)