У меня есть структура, назовите ее Master
, у которой должно быть поле slaves
, которое представляет собой коллекцию Slave
. При добавлении к Master
, каждый Slave
должен быть отмечен уникальным идентификатором, назначенным ему Master
.Как объявить и реализовать структуру, которая отслеживает коллекцию структур?
Так я пытаюсь сделать это в настоящее время, как так:
pub struct Master {
slaves: VecMap<Slave>
}
impl Master {
// omitted constructor
// fn get_unique_id(&self) -> usize {...}
pub fn add_slave(&mut self, slave: &mut Slave) {
let new_id = self.get_unique_id();
slave.set_id(new_id);
self.slaves.insert(new_id, *slave);
// Previous line causes "cannot move out of borrowed content" error
}
pub fn get_slave(&self, id: usize) -> Option<&Slave> {
self.slaves.get(&id)
}
}
Как я должен объявить поле рабов (VecMap
рефов или значений) и реализовать эти методы правильно?
Dietrich Epp был прав на деньги с его теперь удаленным ответом, в частности, первым предложением. В нем просто отсутствовал 'mut' (' & mut self, mut slave: Slave'). Это даже не влияет на подпись функции (можно также опустить ее и написать 'let mut slave = slave;' как первую строку тела). Надеюсь, он это увидит и вернет ответ. – delnan