正在寻找一种惯用的方法来在 Rust 中迭代构建单链表,并进行逐步调试打印?

问题描述 投票:0回答:1

我想在构建时迭代调试打印单链表,但我找不到合法的借用方式。

我处理问题的方式是否过于面向对象? 我是否需要放弃安全 Rust 或使用 RefCell 来完成如此简单的事情?

fn main() {
    let mut list = Some(Box::new(List { val: 0, next: None }));
    let mut current = &mut list;
    for i in 1..10 {
        let next = Box::new(List { val: i, next: None });
        current.as_mut().unwrap().next = Some(next);
        current = &mut current.as_mut().unwrap().next;
        // dbg!(list); Illegal!
    }
}

#[derive(Debug, Clone)]
struct List {
    val: i32,
    next: Option<Box<List>>,
}
rust borrow-checker
1个回答
0
投票

我相信问题来自于对此处列表的两个可变引用:

let mut list = Some(Box::new(List { val: 0, next: None }));
let mut current = &mut list;

因此

list
引用比
current
引用寿命更长,违反了 所有权 规则。

一个资源帮助我理解了为什么链表在安全 Rust 中是一个如此困难的话题,它是太多列表

© www.soinside.com 2019 - 2024. All rights reserved.