我有2个结构:
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 }
}
}
有没有办法告诉编译器在调用MyVectorBuilder
后不会使用build_my_vector()
,这样我就可以将storage
移到MyVector
?< / p>
答案 0 :(得分:5)
是。将MyVectorBuilder
的所有权转交给MakeMyVector
fn make_my_vector(self) -> MyVector {
MyVector { storage: self.storage }
}
答案 1 :(得分:5)
有没有办法告诉编译器在调用
MyVectorBuilder
之后不会使用BuildMyVector()
所以它会让我将存储空间移到MyVector
?
是的,按值MyVectorBuilder
计算:
fn build_my_vector(self) -> MyVector {
MyVector { storage: self.storage }
}
一般情况下,我建议构建器的build
步骤按值依次获取其参数。
如果需要构建两次,构建器可以实现Clone
。