Я новичок в мире Rust и до сих пор не совсем понимаю, как работает владение / заимствование / время жизни. У меня есть этот пример, чтобы продемонстрировать борьбу:
struct Node {
value: bool,
next: Option<Box<Node>>
}
fn populate(next: &mut Option<Box<Node>>) -> Option<Node> {
let node = Node { value: true, next: None };
let result = Some(Box::new(node));
*next = result;
Some(*next.unwrap())
}
fn main() {
let mut node = Node {
value: false,
next: None
};
let result = populate(&mut node.next);
println!("{}", node.unwrap().value);
println!("{}", result.unwrap().value);
}
Я не понимаю, почему так работает ход:
fn populate(next: &mut Option<Box<Node>>) -> Option<Node> {
let node = Node { value: true, next: None };
let result = Some(Box::new(node));
// *next = result;
Some(*result.unwrap() /* *next.unwrap() */)
}
Но другой способ - нет:
fn populate(next: &mut Option<Box<Node>>) -> Option<Node> {
let node = Node { value: true, next: None };
let result = Some(Box::new(node));
*next = result;
Some(*(*next.as_ref().unwrap())) // or Some(*next.unwrap())
}
Как правильно передать право собственности (как в примере выше) без копирования, но с заимствованием, изменяя следующую ссылку (без добавления дополнительных параметров)? Я до сих пор не разбираюсь в этой части ...