将自引用传递给包含对象的函数

2023-12-26

我正在尝试理解 Rust 的所有权模型。我试图在结构体上调用函数时传递对包含对象的引用。

这是我的结构:

pub struct Player {}

impl Player {
    pub fn receive(self, app: &App) {

    }
}

如你看到的,receive期望引用一个App object.

pub struct App {
    pub player: Player,
}

impl App {
    pub fn sender(self) {
        // how to call player.test() and pass self as a reference?
        self.player.receive(&self);
    }
}

上面的代码给了我“使用部分移动的值:self“。这是有道理的,因为App具有移动语义,因此该值被移动到sender被调用时的函数。

如果我改变它以便sender参考self相反,我得到“无法移出借用的内容”,这也有一定道理,因为我们借用了对self当我们进入sender功能。

那我该怎么办?我明白为什么我无法存储对App inside Player,因为这会导致双链结构。但我应该能够借用一个引用并对其执行操作,不是吗?

我在官方教程中没有找到答案。

我通过解决了它self作为参考receive。但如果我想要怎么办app可变的receive?我无法通过self作为可变的sender因为我也在借player作为可变的。


一种遵循方式谢普大师的解决方案 https://stackoverflow.com/a/36940054/155423

脱离关系player from self在调用该方法之前。

就是把player in an Option https://doc.rust-lang.org/stable/std/option/index.html:

impl App {
    pub fn sender(&mut self) {
        let mut player = self.player.take();
        player.receive(&mut self);
        self.player = Some(player);
    }
}

最后一个资源是使用RefCell https://doc.rust-lang.org/stable/std/cell/struct.RefCell.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将自引用传递给包含对象的函数 的相关文章

随机推荐