Iterando sobre un vector de referencias mutables a objetos de rasgos
tengo unstruct
que contiene referencias mutables a objetos de rasgos:
trait Task {
fn do_it(&mut self);
}
struct Worker<'a> {
tasks: Vec<&'a mut Task>,
}
En un método deWorker
, Quiero iterar sobre las tareas y llamar a susdo_it
:
impl<'a> Worker<'a> {
pub fn work(&mut self) {
for task in self.tasks.iter() {
self.work_one(*task);
}
}
fn work_one(&self, task: &mut Task) {
task.do_it();
}
}
Lamentablemente, el verificador de préstamos no me deja hacerlo:
error[E0389]: cannot borrow data mutably in a `&` reference
--> src/main.rs:12:27
|
12 | self.work_one(*task);
| ^^^^^ assignment into an immutable reference
No puedo hacerWorker
genérico porque quiero que contenga tareas de muchos tipos. También necesito tareas para ser mutable. ¿Cómo lo hago en Rust?