我想创建一个包含Vec<ThreadRng>
字段的struct
。
所以这工作得很好,我有一个生成器列表存储在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
。
据我所知,我不能使用ThreadRng
的gen
方法,因为它需要对RNG (gen<T: Rand>(&mut self)
)的可变引用,并且由于我的字段Foo.generators
"Vec<ThreadRng>
"的定义没有指定ThreadRng
应该是可变的,我不能用它做任何需要可变性的事情。
第二个问题:承认我的理解是正确的,我应该如何允许需要对我的ThreadRng
s可变性的动作?
提前感谢!
您需要可变地借用self
:
impl Foo {
fn bar(&mut self) -> i32 {
self.generators[0].gen::<i32>()
}
}