无法使用RwLock和HashMap向下递归树

我有一个树结构,该结构使用rwlock中的HashMap表示节点的子级,但是我递归向下树以插入值的方法似乎存在生命周期问题。可以找到更完整的示例here,但是相关代码是这样的:

struct Node<'a> {
    data: i32,children: rwlock<HashMap<String,Node<'a>>>,parent: Option<&'a Node<'a>> //necessary,as I need to be able to recurse back up the tree
}

impl<'a> Node<'a> {
    fn add_sequence(&'a self,key_list: Vec<String>,data: i32) {
        let mut key_iter = key_list.iter();
        let mut curr = self;

        let last = loop {
            let next = key_iter.next();
            if let None = next {return;}

            let key = next.unwrap();
            if curr.children.read().unwrap().contains_key(key) {
                curr = curr.children.read().as_ref().unwrap().get(key).unwrap();
            } else {
                break next.unwrap();
            }
        };
        curr.add_child(last.to_string(),data);
    }
}

这给了我以下错误:

  --> src/main.rs:22:24
   |
11 | impl<'a> Node<'a> {
   |      -- lifetime `'a` defined here
...
22 |                 curr = curr.children.read().as_ref().unwrap().get(key).unwrap();
   |                        ^^^^^^^^^^^^^^^^^^^^---------                           - temporary value is freed at the end of this statement
   |                        |
   |                        creates a temporary which is freed while still in use
   |                        argument requires that borrow lasts for `'a`

我尝试了诸如this answer中描述的解决方案,但是由于该过程是迭代的而不是一次性的,所以我无法使其正常工作。如何解决此错误?

iCMS 回答:无法使用RwLock和HashMap向下递归树

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2257863.html

大家都在问