Rust编译器不需要可变引用,而应该使用可变引用

Rust编译器不需要可变引用,而应该使用可变引用,rust,Rust,我们正在编写一个函数,用于从Rust中的排序树中删除节点,但Rust编译器一直抱怨,当调用的函数确实需要可变引用时,它不需要可变引用: 错误[E0308]:类型不匹配 -->src/tree.rs:111:17 | 111 | SortedContainer::node_find_父项(&mut Some(node)、&age和name) |^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我们正在编写一个函数,用于从Rust中的排序树中删除节点,但Rust编译器一直抱怨,当调用的函数确实需要可变引用时,它不需要可变引用:

错误[E0308]:类型不匹配
-->src/tree.rs:111:17
|
111 | SortedContainer::node_find_父项(&mut Some(node)、&age和name)
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
=注意:应为'std::option::option'类型`
找到类型“%mut std::option::option”`
这是SortedContainer的impl块中的代码片段(我们的树结构):

fn节点\u查找\u父项和一个mut选项{
//TODO:实现
父选项
}
发布fn查找父项(&mut self,年龄:&i32,名称:&String)->&mut选项{
&mut匹配self.root{
一些(节点)=>如果node.name==*name&&node.age==*age{
自根
}否则{
SortedContainer::node\u find\u parent(&mut Some(node)、&age和name)
}
None=>&mut None,
}
}
SortedContainer::node_find_parent应该返回一个可变引用,因为返回类型是可变引用


我们做错了什么?

&mut match
更改为
match&mut
解决了以下问题:

pub fn find_parent(&mut self, age: &i32, name: &String) -> &mut Option<Box<Node>> {
    match &mut self.root {
        Some(node) => {
            if node.name == *name && node.age == *age {
                &mut self.root
            } else {
                SortedContainer::node_find_parent(&mut self.root, &age, &name)
            }
        }
        None => &mut None,
    }
}
pub fn find_parent(&mut self,年龄:&i32,姓名:&String)->&mut选项{
匹配&mut self.root{
某些(节点)=>{
如果node.name==*name&&node.age==*age{
&多自根
}否则{
SortedContainer::节点\查找\父项(&mut self.root、&age、&name)
}
}
None=>&mut None,
}
}

很难回答您的问题,因为它没有包含一个。我们无法说出代码中存在哪些板条箱(及其版本)、类型、特征、字段等。如果您试图重现您的错误(如果可能的话),或者在全新的货运项目中,那么我们将更容易帮助您,然后您的问题将包括附加信息。您可以使用以下方法减少在此处发布的原始代码。谢谢
pub fn find_parent(&mut self, age: &i32, name: &String) -> &mut Option<Box<Node>> {
    match &mut self.root {
        Some(node) => {
            if node.name == *name && node.age == *age {
                &mut self.root
            } else {
                SortedContainer::node_find_parent(&mut self.root, &age, &name)
            }
        }
        None => &mut None,
    }
}