diff --git a/en/src/collections/vector.md b/en/src/collections/vector.md index 63a2594..b416eec 100644 --- a/en/src/collections/vector.md +++ b/en/src/collections/vector.md @@ -111,9 +111,9 @@ fn main() { ### Slicing -A Vec can be mutable. On the other hand, slices are read-only objects. To get a slice, use `&`. +Immutable or mutable slices of Vecs can be taken, using `&` or `&mut`, respectively. -In Rust, itโ€™s more common to pass slices as arguments rather than vectors when you just want to provide read access. The same goes for `String` and `&str`. +In Rust, itโ€™s more common to pass immutable slices as arguments rather than vectors when you just want to provide read access, as this is more flexible (no move) and efficient (no copy). The same goes for `String` and `&str`. 5. ๐ŸŒŸ๐ŸŒŸ ```rust,editable @@ -129,14 +129,16 @@ fn main() { assert_eq!(slice1, slice2); - // Slices are read only + // A slice can also be mutable, in which + // case mutating it will mutate its underlying Vec. // Note: slice and &Vec are different let vec_ref: &mut Vec = &mut v; (*vec_ref).push(4); let slice3 = &mut v[0..3]; - slice3.push(4); + slice3[3] = 42; - assert_eq!(slice3, &[1, 2, 3, 4]); + assert_eq!(slice3, &[1, 2, 3, 42]); + assert_eq!(v, &[1, 2, 3, 42]); println!("Success!"); } diff --git a/solutions/collections/Vector.md b/solutions/collections/Vector.md index 7581a80..68edfba 100644 --- a/solutions/collections/Vector.md +++ b/solutions/collections/Vector.md @@ -156,21 +156,24 @@ fn main() { let mut v = vec![1, 2, 3]; let slice1 = &v[..]; - // out of bounds will cause a panic + // Out of bounds will cause a panic // You must use `v.len` here - let slice2 = &v[0..v.len()]; + let slice2 = &v[0..3]; assert_eq!(slice1, slice2); - // slice are read only + // A slice can also be mutable, in which + // case mutating it will also mutate its underlying Vec // Note: slice and &Vec are different let vec_ref: &mut Vec = &mut v; (*vec_ref).push(4); - let slice3 = &mut v[0..]; + let slice3 = &mut v[0..4]; + slice3[3] = 42; - assert_eq!(slice3, &[1, 2, 3, 4]); + assert_eq!(slice3, &[1, 2, 3, 42]); + assert_eq!(v, &[1, 2, 3, 42]); - println!("Success!") + println!("Success!"); } ```