我正在尝试在trie上实现递归插入,但却遇到了错误:“无法分配给cur_node
,因为它是借用的”,“不能多次借用*cur_node
可变性在一个时间“。
pub trait Trie {
fn insert_word(&mut self, word: &str);
}
pub struct VectorTrie {
edges: Vec<Edge>,
}
pub struct Edge {
ch: char,
to: VectorTrie,
}
impl Trie for VectorTrie {
fn insert_word(&mut self, word: &str) {
let mut cur_node = self;
for ch in word.chars() {
cur_node = cur_node.get_or_create(ch);
}
}
}
impl VectorTrie {
pub fn get_or_create(&mut self, ch: char) -> &mut VectorTrie {
match self.edges.binary_search_by(|e| e.ch.cmp(&ch)) {
Ok(idx) => &mut self.edges[idx].to,
Err(idx) => {
let to = VectorTrie { edges: Vec::new() };
let e = Edge { ch: ch, to: to };
self.edges.insert(idx, e);
&mut self.edges[idx].to
}
}
}
}
但是,我想要做的只是通过取每个插入返回的Node("VectorTrie")
并继续将下一个字符插入Node
来递归插入单个字符。
毫无疑问,错误再次是因为我试图将C逻辑应用于Rust ...我正在尝试创建cur_node
变量作为临时引用,可在每个循环上修改,但显然这不会发生这里。那么在Rust中实现我的目标应该是什么?