我有两个结构:
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()它所以它会让我移动storage到MyVector?
是.将所有权MyVectorBuilder转入MakeMyVector
fn make_my_vector(self) -> MyVector {
MyVector { storage: self.storage }
}
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉编译器
MyVectorBuilder不会使用跟随调用,BuildMyVector()所以它会让我将存储移动到MyVector?
是的,MyVectorBuilder按价值计算:
fn build_my_vector(self) -> MyVector {
MyVector { storage: self.storage }
}
Run Code Online (Sandbox Code Playgroud)
一般来说,我建议build构建器的步骤按值依次获取其参数.
如果需要构建两次,则构建器可以实现Clone.
| 归档时间: |
|
| 查看次数: |
990 次 |
| 最近记录: |