У меня есть хэш-карта для всех моих состояний, которая является HashMap<String, Rc<State>>
, и я хочу вызвать член текущего состояния fn init(&mut self)
. Но я получаю сообщение об ошибке со следующим кодом:
...
if let Some(state) = self.states.get_mut(state_id) {
(*state).init();
}
...
Вот ошибка:
src/main.rs:70:25: 70:33 error: cannot borrow immutable borrowed content as mutable
src/main.rs:70 (*state).shutdown();`
Как видно из документации, проблема в том, что get_mut
возвращает изменяемую ссылку на состояние, а не ссылку на изменяемое состояние. Итак, как мне получить ссылку на изменяемое состояние?
if let Some(mut state) = self.states.get_mut(state_id) {
помогает? - person tilpner   schedule 03.08.2015RefCell
, но я бы предпочел не использовать их, потому что они медленнее и могут легко запаниковать, если я не буду очень осторожен. - person Shien   schedule 03.08.2015Rc
, но даже документациюRc
используетRefCell
s для внутренней изменчивости. - person tilpner   schedule 03.08.2015HashMap
. Rust не может рассуждать об изменчивости внутреннего значенияRc
, поэтому он запрещает мутацию, покаRc
не уникален. Вы можете использоватьget_mut
, если есть только одна ссылка. Но тогда вы могли бы вообще броситьRc
- person oli_obk   schedule 03.08.2015Rc
? - person Matthieu M.   schedule 04.08.2015