我想创建一个struct包含a的字段Vec<ThreadRng>.
所以这很好用,我有一个存储在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()]}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想用它,比如说bar:
impl Foo {
fn bar(&self) -> i32 {
self.generators[0].gen::<i32>()
}
}
Run Code Online (Sandbox Code Playgroud)
但我不能,而且我得到了cannot borrow immutable field 'self.generators' as mutable.
据我所知,我不能使用gen方法,ThreadRng因为它需要对RNG(gen<T: Rand>(&mut self))的可变引用,并且由于我的字段Foo.generators" Vec<ThreadRng>" 的定义没有指定ThreadRng应该是可变的,我不能对它做任何需要可变性的事情.
第一个问题:我对正在发生的事情的理解是正确的,还是我完全错了?如果是这样,有人可以向我解释实际发生了什么吗?
第二个问题:承认我的理解是正确的,我怎么能允许我ThreadRng的行为需要可变性?
提前致谢!
你需要self可变地借用:
impl Foo {
fn bar(&mut self) -> i32 {
self.generators[0].gen::<i32>()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1112 次 |
| 最近记录: |