2017-06-12 113 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

相關問題