У меня есть следующий код:
struct Node{
node_map: HashMap<char, Node>,
value: Option<i32>,
}
struct Trie {
root: Node,
}
impl Trie {
fn new() -> Trie {
Trie {
root: Node{
node_map: HashMap::new(),
value: None,
},
}
}
fn find(&self, key: &String) -> Option<&Node> {
// Returning some Option<&Node>
}
fn delete(&mut self, key: &String) -> Option<i32> {
// extract code snippet
let mut search_node = self.find(key);
if search_node.is_some() {
search_node.unwrap().node_map.remove(& 'x');
}
None
}
}
Rust жалуется на ошибку в search_node.unwrap().chs
part: не может заимствовать данные в ссылке "&" как изменяемые
Итак, я понимаю, что функция find
возвращает Option<&Node>
, поэтому при развертывании в указанной выше строке я получаю ссылку на Node
.
Попытки :
- Я попытался разыменовать узел с помощью:
*search_node.unwrap().node_map.remove(& 'x');
или *(search_node.unwrap()).node_map.remove(& 'x');
, но он все равно выдает ошибку. - Я последовал за другим ответом здесь и попытался сделать
node_map
изменяемымкак:
struct Node<'a> {
node_map: &'a mut HashMap<char, Node<'a>>,
value: Option<i32>,
}
Но потом я получил жалобу на отсутствие жизни в нескольких местах. Одно конкретное место, которое я не знаю, как добавить, - это функция new
.
Пожалуйста, дайте мне знать, как решить исходную проблему или как добавить соответствующее время жизни.