我正在寻找有关在Rust中解决borrow-checker / lifetime问题的智慧。我正在尝试将通用嵌套结构(转换为impl迭代器或Vec)展平。它可能只是几个&s和`s`的问题就可以工作:
fn iter_els(prev_result: Vec<&El>) -> Vec<&El> {
// Iterate over all elements from a tree, starting at the top-level element.
let mut result = prev_result.clone();
for el in prev_result {
for child in &el.children {
result.push(&child.clone());
}
result.extend(iter_els(&el.children));
}
result
}
您会注意到,这立即引发的异常是iter_els期望的是一个Vec的引用,而不是一个引用本身。直接解决这个问题时,其他问题也会出现,就像玩氧化但安全的打地鼠游戏一样。