我有两个结构:
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
发布于 2017-06-12 08:39:50
是。将MyVectorBuilder的所有权传递给MakeMyVector
fn make_my_vector(self) -> MyVector {
MyVector { storage: self.storage }
}发布于 2017-06-12 08:40:37
是否有一种方法可以告诉编译器,在调用
MyVectorBuilder时不会使用BuildMyVector(),这样就可以将存储移到MyVector上了吗?
是的,按价值计算MyVectorBuilder:
fn build_my_vector(self) -> MyVector {
MyVector { storage: self.storage }
}通常,我建议构建器的build步骤正是基于这个原因通过值进行论证。
如果需要进行两次构建,则构建器可以实现Clone。
https://stackoverflow.com/questions/44494888
复制相似问题