首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要结构,但找到了对结构的可变引用

需要结构,但找到了对结构的可变引用
EN

Stack Overflow用户
提问于 2021-10-11 11:25:31
回答 1查看 134关注 0票数 1

我创建了一个类型Space,它具有相同类型Space的可选字段lef_neighborright_neighbor。Rust需要在编译时知道类型的大小,所以我将类型包装在Box<>中。现在我想创建一个方法,我可以在Space上调用该方法,该方法创建这个Space对象的right_neighbor并将其分配给它。它还需要将新Spaceleft_neighbor字段设置为旧Space,以便它们都可以找到对方。

代码语言:javascript
运行
复制
pub struct Space {
    left_neighbor: Option<Box<Space>>,
    right_neighbor: Option<Box<Space>>,
}

impl Space {
    pub fn new() -> Self {
        Self {
            left_neighbor: None,
            right_neighbor: None,
        }
    }

    pub fn create_neigbor(&mut self) {
        let neighbor_space = Space::new();
        neighbor_space.left_neighbor = Some(Box::new(self));
        self.right_neighbor = Some(Box::new(neighbor_space));
    }
}

(Playground link)

这会产生编译错误:

代码语言:javascript
运行
复制
   |
16 |         neighbor_space.left_neighbor = Some(Box::new(self));
   |                                                      ^^^^ expected struct `Space`, found `&mut Space`

如何解决此问题?

EN

Stack Overflow用户

发布于 2021-10-11 11:41:02

首先,您正在制作的内容类似于一个双向链表。众所周知,双向链表很难在安全的环境中实现。我推荐给Learning Rust with Entirely Too Many Linked Lists读一读。

作为一个TLDR,你可以使用原始指针和unsafe,或者将你的空间存储在外部存储器(一个向量,或者其他东西)中,并使用索引到该空间作为实际对象的代理,或者使用Rc/Arc而不是Box (尽管这可能会导致内存泄漏,除非你正确地使用弱ref等)。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69525434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档