Ich versuche, eine Nachrichten-Routing-App zu entwickeln. Ich habe die offiziellen Rust-Dokumente und einige Artikel gelesen und dachte, dass ich weiß, wie es funktioniert, Dinge zu besitzen, zu besitzen und Dinge zu leihen, aber mir wurde klar, dass ich es nicht getan habe.Kann nicht unveränderlich ausgeliehenen Inhalt als veränderbar
use std::collections::HashMap;
use std::vec::Vec;
struct Component {
address: &'static str,
available_workers: i32,
lang: i32
}
struct Components {
data: HashMap<i32, Vec<Component>>
}
impl Components {
fn new() -> Components {
Components {data: HashMap::new() }
}
fn addOrUpdate(&mut self, component: Component) -> &Components {
if !self.data.contains_key(&component.lang) {
self.data.insert(component.lang, vec![component]);
} else {
let mut q = self.data.get(&component.lang); // this extra line is required because of the error: borrowed value does not live long enough
let mut queue = q.as_mut().unwrap();
queue.remove(0);
queue.push(component);
}
self
}
}
(Auch auf der playground)
Erzeugt den Fehler:
error: cannot borrow immutable borrowed content `**queue` as mutable
--> src/main.rs:26:13
|
26 | queue.remove(0);
| ^^^^^ cannot borrow as mutable
error: cannot borrow immutable borrowed content `**queue` as mutable
--> src/main.rs:27:13
|
27 | queue.push(component);
| ^^^^^ cannot borrow as mutable
Könnten Sie bitte den Fehler erklären und es wäre toll, wenn Sie mir die richtige Umsetzung geben kann.
Danke. Jetzt verstehe ich es besser. Danke für den Hinweis zu den Drucktypen, es erweist sich als sehr hilfreich für die Fehlerbehebung – dmgcodevil
Ist der Link unter * die beteiligten Typen ausdrucken * noch verfügbar? Es gibt eine SO-Frage, aber ich dachte, der Link deutete auf eine Antwort hin. – stej
@stej der Link ist auf die Frage. Dies ermöglicht eine bessere Antwort oder eine andere Antwort für den Implementierer, wenn die Situation anders ist. In diesem Fall habe ich die Version "dem leeren Tupel zuweisen" verwendet. – Shepmaster