将成员的所有权从一个结构移动到另一个结构?

Shm*_*opy 5 rust

我有两个结构:

struct MyVector {
    storage: Vec<u32>,
}

struct MyVectorBuilder {
    storage: Vec<u32>,
}

impl MyVectorBuilder {
    fn new() -> MyVectorBuilder {
        MyVectorBuilder { storage: Vec::new() }
    }

    fn build_my_vector(&mut self) -> MyVector {
        // Doesn't compile: ^^^^ cannot move out of borrowed content
        MyVector { storage: self.storage }
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉编译器MyVectorBuilder在调用后不会使用build_my_vector()它所以它会让我移动storageMyVector

red*_*ime 5

是.将所有权MyVectorBuilder转入MakeMyVector

fn make_my_vector(self) -> MyVector {
    MyVector { storage: self.storage }
}
Run Code Online (Sandbox Code Playgroud)


Mat*_* M. 5

有没有办法告诉编译器MyVectorBuilder不会使用跟随调用,BuildMyVector()所以它会让我将存储移动到MyVector

是的,MyVectorBuilder按价值计算:

fn build_my_vector(self) -> MyVector {
    MyVector { storage: self.storage }
}
Run Code Online (Sandbox Code Playgroud)

一般来说,我建议build构建器的步骤按值依次获取其参数.

如果需要构建两次,则构建器可以实现Clone.