0
Ich möchte einige Knoten im Baum zu finden, und ich brauche einen Zeiger auf den Behälter von Knoten: &mut Vec<Node>
Wie mache ich einen veränderbaren Zeiger auf das Feld des Knoten des Baumes und mutiere es mutieren?
struct Node {
c: Vec<Node>,
v: i32,
}
impl Node {
pub fn new(u: i32, n: Node) -> Node {
let mut no = Node {
c: Vec::new(),
v: u,
};
no.c.push(n);
no
}
}
fn main() {
let mut a = Node::new(1,
Node::new(2,
Node::new(3,
Node::new(4,
Node::new(5,
Node {
c: Vec::new(),
v: 6,
})))));
let mut p: &mut Vec<Node> = &mut a.c;
while p.len() > 0 {
p = &mut p[0].c;
}
p.push(Node {
c: Vec::new(),
v: 7,
});
}
Danke. Ich kann nicht verstehen, warum die Lebensdauer im Rost mit Klammern endet {}, denke ich, die Lebensdauer sollte dann enden, wenn diese Variable das letzte Mal benutzt wird. –
@ J.Jerk Lebensdauer ist ein Zeitlimit einer Variablen, die mit der Zuordnung beginnt und mit der Freigabe endet. Der Deallokationsprozess findet statt, wenn die Variable ihren Gültigkeitsbereich verlässt. [Lesen Sie mehr] (https://doc.rust-lang.org/book/lifetimes.html#thinking-in-scopes) –
@ J.Jerk Dies ist nicht lebenslangen Problem. Borrow Checker denkt, dass "p" hier von sich selbst geliehen wird: 'p = & mut p [0] .c'. Nachdem das 'p' gesperrt wurde, kannst du nichts mehr damit machen. Das Ersetzen von "p" durch temporäre Variable ermöglicht es, eine Selbsthemmung zu vermeiden. – aSpex