【发布时间】:2019-12-11 11:14:40
【问题描述】:
我们正在编写一个函数来从 Rust 中的排序树中删除一个节点,但遇到了 Rust 编译器抱怨当被调用的函数确实需要可变引用时它不期望可变引用:
error[E0308]: mismatched types
--> src/tree.rs:111:17
|
111 | SortedContainer::node_find_parent(&mut Some(node), &age, &name)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected enum `std::option::Option`, found mutable reference
|
= note: expected type `std::option::Option<std::boxed::Box<tree::Node>>`
found type `&mut std::option::Option<std::boxed::Box<tree::Node>>`
这是我们在 SortedContainer 的 impl 块中的代码 sn-p(我们的树形结构):
fn node_find_parent<'a>(parent_option: &'a mut Option<Box<Node>>, age: &i32, name: &String) -> &'a mut Option<Box<Node>> {
// TODO: implement
parent_option
}
pub fn find_parent(&mut self, age: &i32, name: &String) -> &mut Option<Box<Node>> {
&mut match self.root {
Some(node) => if node.name == *name && node.age == *age {
self.root
} else {
SortedContainer::node_find_parent(&mut Some(node), &age, &name)
}
None => &mut None,
}
}
SortedContainer::node_find_parent 应该返回一个可变引用,因为返回类型是一个可变引用
我们做错了什么?
【问题讨论】:
-
很难回答您的问题,因为它不包含minimal reproducible example。我们无法分辨代码中存在哪些 crate(及其版本)、类型、特征、字段等。如果您尝试在Rust Playground 上重现您的错误,如果可能的话,这将使我们更容易为您提供帮助,否则在全新的 Cargo 项目中,然后在edit 您的问题中包含附加信息。您可以使用Rust-specific MRE tips 来减少您在此处发布的原始代码。谢谢!
标签: rust