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

时间:2015-10-20 13:22:26

标签: rust

我想创建一个struct,其字段包含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()]}
    }
}

现在我想使用它,比如bar方法:

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

但我不能,而且我得到cannot borrow immutable field 'self.generators' as mutable

据我了解,我无法使用gen的{​​{1}}方法,因为它需要对RNG(gen<T: Rand>(&mut self))的可变引用以及我的字段ThreadRng的定义“Foo.generators”没有指明Vec<ThreadRng>应该是可变的,我不能对它做任何需要改变的事情。

第一个问题:我对正在发生的事情的理解是正确的,还是我完全错了?如果是这样,有人可以向我解释实际发生了什么吗?

第二个问题:承认我的理解是正确的,我怎么能允许在ThreadRng上允许需要变更的行为?

提前致谢!

1 个答案:

答案 0 :(得分:5)

您需要可变地借用library(shiny) values <- reactiveValues() shinyApp( ui <- basicPage( uiOutput("timerange"), textOutput( "today" ) ), server <- function(input,output){ isolate(values$day <- Sys.Date()) output$today <- renderText({ as.character(values$day-1) }) output$timerange <- renderUI({ dateRangeInput("daterange", "Daterange",start = values$day-1 ,end = values$day-1,max=values$day) }) })

self