Ich habe eine struct
, die wandelbar Referenzen hält Objekte Merkmal:Iterieren über einen Vektor von wandelbaren Verweise auf Charakterzug Objekte
trait Task {
fn do_it(&mut self);
}
struct Worker<'a> {
tasks: Vec<&'a mut Task>,
}
Bei einem Verfahren zur Worker
, die ich über die Aufgaben wiederholen wollen, und rufen ihre do_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();
}
}
Leider die borrow checker mich nicht es tun lassen:
error[E0389]: cannot borrow data mutably in a `&` reference
--> src/main.rs:12:27
|
12 | self.work_one(*task);
| ^^^^^ assignment into an immutable reference
Ich kann Worker
nicht generisch machen, weil ich will, dass es Aufgaben vieler Arten hält. Ich brauche auch Aufgaben, um veränderbar zu sein. Wie mache ich das in Rust?
"unveränderlicher Bezug auf einen veränderbaren einen" Aaah, das ist ein Stück, das ich fehlte. Und bezüglich der Bezugnahme auf das Selbst: Dies bedeutet, dass wenn ich irgendeinen Zustandswechsel vornehmen müsste, ich es mit dem Körper der "for" -Schleife machen müsste. Bekomme ich es richtig? – Tomo
@Tomo Aktualisiert die Antwort, nicht wirklich eine ideale Lösung. Hoffe jemand anders kann etwas besseres vorschlagen. – Arjan
Ja, das sieht hässlich aus. :) – Tomo