1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-03-24 15:29:28 +02:00

Minor fixes (#579)

* order the Cat and Dog correctly in the vec

* make example editable

* patterns: capture vs. constant

* clarify notes on indexing a string
This commit is contained in:
Dustin J. Mitchell 2023-04-24 14:46:38 -04:00 committed by GitHub
parent 4266078684
commit 6744822454
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 4 deletions

View File

@ -9,4 +9,8 @@ You can also destructure `structs`:
* Change the literal values in `foo` to match with the other patterns. * Change the literal values in `foo` to match with the other patterns.
* Add a new field to `Foo` and make changes to the pattern as needed. * Add a new field to `Foo` and make changes to the pattern as needed.
* The distinction between a capture and a constant expression can be hard to
spot. Try changing the `2` in the second arm to a variable, and see that it subtly
doesn't work. Change it to a `const` and see it working again.
</details> </details>

View File

@ -35,6 +35,8 @@ fn main() {
* `String` implements `Deref<Target = str>` which transparently gives it access to `str`'s methods. * `String` implements `Deref<Target = str>` which transparently gives it access to `str`'s methods.
* Write and compare `let s3 = s1.deref();` and `let s3 = &*s1`;. * Write and compare `let s3 = s1.deref();` and `let s3 = &*s1`;.
* `String` is implemented as a wrapper around a vector of bytes, many of the operations you see supported on vectors are also supported on `String`, but with some extra guarantees. * `String` is implemented as a wrapper around a vector of bytes, many of the operations you see supported on vectors are also supported on `String`, but with some extra guarantees.
* Compare the different ways to index a `String` by using `s3[i]` and `s3.chars().nth(i).unwrap()` where `i` is in-bound, out-of-bounds, and "on" the flag Unicode character. * Compare the different ways to index a `String`:
* To a character by using `s3.chars().nth(i).unwrap()` where `i` is in-bound, out-of-bounds.
* To a substring by using `s3[0..4]`, where that slice is on character boundaries or not.
</details> </details>

View File

@ -2,7 +2,7 @@
Trait objects allow for values of different types, for instance in a collection: Trait objects allow for values of different types, for instance in a collection:
```rust ```rust,editable
trait Pet { trait Pet {
fn name(&self) -> String; fn name(&self) -> String;
} }
@ -27,8 +27,8 @@ impl Pet for Cat {
fn main() { fn main() {
let pets: Vec<Box<dyn Pet>> = vec![ let pets: Vec<Box<dyn Pet>> = vec![
Box::new(Dog { name: String::from("Fido") }),
Box::new(Cat), Box::new(Cat),
Box::new(Dog { name: String::from("Fido") }),
]; ];
for pet in pets { for pet in pets {
println!("Hello {}!", pet.name()); println!("Hello {}!", pet.name());