我正在尝试了解 Rust 的所有权模型。在结构上调用函数时,我试图传递对包含对象的引用。
这是我的结构:
pub struct Player {}
impl Player {
pub fn receive(self, app: &App) {
}
}
如您所见,receive
期望引用一个App
对象。
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
可变的。