2017-06-12 73 views
3

我有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()调用它会让我移动到storageMyVector使用吗?

+0

注意:您可能想更好地熟悉Rust命名约定,方法应该是'snake_case'而不是'PascalCase'。 –

+0

@MatthieuM。谢谢,旧习惯 – Shmoopy

+4

不用担心,编译器会一直提醒你,直到你遵守:) –

回答

5

是的。合格MyVectorBuilder所有权为MakeMyVector

fn make_my_vector(self) -> MyVector { 
    MyVector { storage: self.storage } 
} 
5

有没有办法告诉MyVectorBuilder不会被用来向followning一个BuildMyVector()调用所以它会让我的存储移动到MyVector编译器?

是,服用MyVectorBuilder按值:

fn build_my_vector(self) -> MyVector { 
    MyVector { storage: self.storage } 
} 

一般情况下,我建议build步骤建设者采用由值它的参数正是这个原因。

如果需要建造两次,建造者可以实施Clone

相关问题