2015-10-20 25 views
2

我想創建一個struct,字段中包含Vec<ThreadRng>結構字段中的Rng Vec,不能借用不可變的字段作爲可變

所以這個工作得很好,我有存儲在Foo.generators發電機的列表:

extern crate rand; 

use std::vec::Vec; 
use rand::{Rng, ThreadRng}; 

struct Foo { 
    generators: Vec<ThreadRng>, 
} 

impl Foo { 
    fn new() -> Foo { 
     Foo { generators: vec![rand::thread_rng(), rand::thread_rng()]} 
    } 
} 

現在我想用它,說在一個bar方法:

impl Foo { 
    fn bar(&self) -> i32 { 
     self.generators[0].gen::<i32>() 
    } 
} 

但是,我不能,我得到一個cannot borrow immutable field 'self.generators' as mutable

按照我的理解,因爲它需要一個可變參考RNG(gen<T: Rand>(&mut self))我不能使用的ThreadRnggen方法,因爲我的字段的定義Foo.generatorsVec<ThreadRng>」不指定該ThreadRng應該是可變的,我對於需要可變性的任何事情都無能爲力。

第一個問題:是我對正在發生的事情有所瞭解,還是我完全錯了?如果是這樣,有人可以向我解釋發生了什麼?

第二個問題:承認我的理解是正確的,我應該如何允許我的ThreadRng需要可變性的操作?

在此先感謝!

回答

5

你需要借self性情不定地:

impl Foo { 
    fn bar(&mut self) -> i32 { 
     self.generators[0].gen::<i32>() 
    } 
} 
+0

嗯,我不認爲這會是這麼簡單...謝謝! – evuez

相關問題