move_semantics1 solution

This commit is contained in:
mo8it 2024-06-21 16:16:52 +02:00
parent 6a79ada7f2
commit 946c29679e
3 changed files with 27 additions and 5 deletions

View file

@ -1,3 +1,4 @@
// TODO: Fix the compiler error in this function.
fn fill_vec(vec: Vec<i32>) -> Vec<i32> { fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
let vec = vec; let vec = vec;
@ -17,9 +18,7 @@ mod tests {
#[test] #[test]
fn move_semantics1() { fn move_semantics1() {
let vec0 = vec![22, 44, 66]; let vec0 = vec![22, 44, 66];
let vec1 = fill_vec(vec0); let vec1 = fill_vec(vec0);
assert_eq!(vec1, vec![22, 44, 66, 88]); assert_eq!(vec1, vec![22, 44, 66, 88]);
} }
} }

View file

@ -342,8 +342,7 @@ error on the line where we push an element to the vector, right?
The fix for this is going to be adding one keyword, and the addition is NOT on The fix for this is going to be adding one keyword, and the addition is NOT on
the line where we push to the vector (where the error is). the line where we push to the vector (where the error is).
Also: Try accessing `vec0` after having called `fill_vec()`. See what Try accessing `vec0` after having called `fill_vec()`. See what happens!"""
happens!"""
[[exercises]] [[exercises]]
name = "move_semantics2" name = "move_semantics2"

View file

@ -1 +1,25 @@
// Solutions will be available before the stable release. Thank you for testing the beta version 🥰 fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
let mut vec = vec;
// ^^^ added
vec.push(88);
vec
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn move_semantics1() {
let vec0 = vec![22, 44, 66];
let vec1 = fill_vec(vec0);
// `vec0` can't be accessed anymore because it is moved to `fill_vec`.
assert_eq!(vec1, vec![22, 44, 66, 88]);
}
}