在循环中更改可变引用

时间:2016-12-01 21:19:20

标签: rust nodes trie borrow-checker

我正在尝试在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中实现我的目标应该是什么?

0 个答案:

没有答案