我有一个indice = 1
mlista = [{'uno':1,'dos':2,'tres':3}, {'cuatro':4,'cinco':5,'seis':6}]
mndic = {}
mndic = dict((mlista.index(d)+indice, d) for d in mlista)
print(mndic)
#output {1: {'uno': 1, 'dos': 2, 'tres': 3}, 2: {'cuatro': 4, 'cinco': 5, 'seis': 6}}
结构的可变引用,它包含一些数据。我在该结构上的可变函数(如Environment
)返回对新创建的内存的只读引用。我想在我的create_data
中添加多个数据,并返回对该数据的只读引用。但是,当我尝试使用Rust不可变引用时,我遇到了Rust的“多变量借用”错误。
Rust的不可变引用保证了底层数据不会改变。我不确定我是否需要这种保证。有没有办法让我得到一个“只读”参考,不能保证它指向的内存被冻结?
这是一个用不可变引用重现我的问题的程序。
Environment
编译错误:
struct Environment {
data: Vec<Data>,
}
#[derive(Debug)]
struct Data(u8);
#[derive(Debug)]
struct DataRef<'a>(&'a Data);
impl Environment {
fn new() -> Environment {
Environment { data: Vec::new() }
}
fn create_data(&mut self, i: u8) -> &Data {
self.data.push(Data(i));
&self.data[self.data.len() - 1]
}
}
fn f<'a>(environment: &'a mut Environment) -> (DataRef<'a>, DataRef<'a>) {
let a = DataRef(environment.create_data(1));
let b = DataRef(environment.create_data(2));
(a, b)
}
fn main() {
println!("{:?}", f(&mut Environment::new()));
}
我不完全确定如何标题这个问题或如何搜索答案。