Skip to content
On this page

Move语义4: exercises/move_semantics/move_semantics4.rs

题目

rust
// move_semantics4.rs
//
// Refactor this code so that instead of passing `vec0` into the `fill_vec`
// function, the Vector gets created in the function itself and passed back to
// the main function.
//
// Execute `rustlings hint move_semantics4` or use the `hint` watch subcommand
// for a hint.

// I AM NOT DONE

fn main() {
    let vec0 = Vec::new();

    let mut vec1 = fill_vec(vec0);

    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);

    vec1.push(88);

    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
}

// `fill_vec()` no longer takes `vec: Vec<i32>` as argument
fn fill_vec() -> Vec<i32> {
    let mut vec = vec;

    vec.push(22);
    vec.push(44);
    vec.push(66);

    vec
}

重构此代码,以使vec0不再传递到fill_vec函数中,而是在函数中创建Vec并将其返回给主函数。

题目解析

这里直接按照题目要求修改即可。

rust
fn main() {
    let vec0 = Vec::new(); 

    let mut vec1 = fill_vec(vec0); 
    let mut vec1 = fill_vec(); 

    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);

    vec1.push(88);

    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
}

// `fill_vec()` no longer takes `vec: Vec<i32>` as argument
fn fill_vec() -> Vec<i32> {
    let mut vec = vec;  
    let mut vec = vec![];  

    vec.push(22);
    vec.push(44);
    vec.push(66);

    vec
}

Powered by VitePress