我想创建一个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
上允许需要变更的行为?
提前致谢!
答案 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