Дизайн API машины с отслеживанием состояния на языке Rust - PullRequest
0 голосов
/ 11 июля 2020

Я изучаю ржавчину, и у меня проблема с дизайном какой-то машины с отслеживанием состояния, минимальный пример будет примерно таким:

struct Bar {
    x: u32
}

struct Foo {
    v: Vec<Bar>,
}

impl Foo {
    fn foo(&mut self, x: usize) {
        self.bar(&self.v[x]);
    }

    fn bar(&mut self, b: &Bar) {
        self.v.push(Bar{x: b.x});
    }
}

проблема, очевидно, связана с ошибкой компилятора: "не может заимствовать *self как изменяемый, потому что он также заимствован как неизменяемый ", в строке:" self.bar (& self.v [x]) "я в значительной степени понимаю ошибку и ищу несколько способов решения проблемы , поскольку я точно знаю, что я не мутирую вектор "v", я уже знаю метод RefCell и ищу все возможности только для лучшего понимания ржавчины.

I ' м открыт с любыми идеями, всем спасибо!

...