この質問はおそらく基本的なものですが、私は何を検索するべきかを知りません。 私は本の中で私に飛び出した何を見ていない、と私は錆の初心者だ:変更可能で不変なデータアクセス
struct Node;
impl Node {
fn children(&mut self) -> &mut Vec<Node> {
// Pulls a field out of Node, to be mutated
}
fn next_node(&self) -> Node {
// Produces a new value using values computed from self.
// Doesn't hold a reference to self
}
}
[...]
if self.children().len() > K {
let mut next_node = self.next_node();
let list = self.children();
// something involving next_node and list
}
これは私が最終的に私がやったことは良かったという錆を納得させるようになったものです。 は、私はもっとストレートフォワードたが見つかりました:
let list = self.children();
if list.len() > K {
let mut next_node = self.next_node();
// Something involving next_node and list
}
しかし、真実であるself.children
にまで開催された可変1は、すでにあったので、私はnext_node
にself
への不変の参照を取得できませんでしたので、それが訴えました。
特にこの実装では、私は.children()
を1回だけ実行します。この場合、これは非常に複雑な方法ではありませんが、可能性があります。
children
は複数回計算されません。不要な場合はnext_node
を作成しないでください。