小编Ram*_*ana的帖子

调试打印导致字段类型为 std::rc::Rc 的结构的堆栈溢出

我正在遵循本书中的链表实现。和List结构Node是这样的 -

type Link<T> = Option<Rc<RefCell<Node<T>>>>;

#[derive(Debug)]
pub struct List<T> {
    head: Link<T>,
    tail: Link<T>,
}

#[derive(Debug)]
struct Node<T> {
    elem: T,
    next: Link<T>,
    prev: Link<T>,
}
Run Code Online (Sandbox Code Playgroud)

我有一个push_front像下面这样的方法 -

    pub fn push_front(&mut self, elem: T) {
        let new_node = Node::new(elem);
        let new_node = Rc::new(RefCell::new(new_node));
        let mut old_head = self.head.take();
        old_head.as_mut().map(|node| {
            node.borrow_mut().prev = Some(Rc::clone(&new_node));
        });
        new_node.borrow_mut().next = old_head.clone();
        self.head = Some(new_node);
        if self.tail.is_none() {
            self.tail = self.head.clone();
        }
    }
Run Code Online (Sandbox Code Playgroud)

该代码编译良好。List但是每当我在测试中放入调试打印时,我都会收到测试失败并显示消息thread …

rust

5
推荐指数
1
解决办法
249
查看次数

[RangeFrom&lt;{integer}&gt; 未实现特征 SliceIndex&lt;[i32]&gt; ;1]

AsRef[i32]我编写了一个函数,它采用带有bound的通用参数T。现在我想使用方法在函数内部进一步对输入进行切片get。但 Rust 编译器不允许我使用1..范围来切片。我可以使用split_at方法来分割切片。那可行。但我的问题是为什么我不能array.as_ref().get([1..])在这种情况下使用?我是否需要向泛型类型添加任何其他特征边界才能使其工作?如果我使用这样get的一个索引array.as_ref().get(0)就可以了。

这是我的代码 -

fn find<T>(array: T, key: i32) -> Option<usize> 
where 
    T: AsRef<[i32]>,
{
    let arr = array.as_ref().get([1..]);
    println!("slicing successful");
    
    None
}

fn main() {
    let arr = [1, 2, 3];
    find(arr, 1);
}
Run Code Online (Sandbox Code Playgroud)

游乐场链接

rust

0
推荐指数
1
解决办法
543
查看次数

标签 统计

rust ×2