来自可变引用的不可变引用延长了可变引用的寿命

时间:2018-06-05 16:59:32

标签: rust lifetime

我有一个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

(Rust Playground)

编译错误:

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()));
}

我不完全确定如何标题这个问题或如何搜索答案。

0 个答案:

没有答案