0
私は木にいくつかのノードを見つけたいと私は、ノードのコンテナへのポインタを必要とする:&mut Vec<Node>
ツリーのノードのフィールドへのポインタを変更してそれを変更する方法はありますか?
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,
});
}
ありがとうございます。私は理解できません。なぜなら、寿命が括弧{}で終わっているのはなぜですか? –
@ J.Jerk lifetimeは、割り当てから始まり、割り当て解除で終わる変数の時間制限です。割り当て解除プロセスは、変数がスコープから外れると発生します。 [続きを読む](https://doc.rust-lang.org/book/lifetimes.html#thinking-in-scopes) –
@ J.Jerkこれは生涯の問題ではありません。 Borrowチェッカーは、 'p'は' p =&mut p [0] .c'というところで 'p'がそれ自身で借りていると考えています。その後、 'p'はロックされ、もう何もできません。 'p'を一時変数に置き換えることで、自己ロックを避けることができます。 – aSpex