结构字段中的Rng的Vec,不能借用不可变字段作为可变字段



我想创建一个包含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

据我所知,我不能使用ThreadRnggen方法,因为它需要对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>()
    }
}

相关内容

  • 没有找到相关文章