1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-03-22 06:51:58 +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.
* 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>

View File

@ -35,6 +35,8 @@ fn main() {
* `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`;.
* `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>

View File

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