Я пытаюсь оценить модель собственности 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
внутри Player
, так как это приведет к двусвязной структуре. Но я должен иметь возможность заимствовать ссылку и выполнять операции над ней, нет?
Я не смог найти ответ в официальном учебнике.
Я решил это, передав self
в качестве ссылки в receive
. Но что, если я хочу, чтобы app
был изменен в receive
? Я не могу передать self
как изменчивый в sender
, потому что я также занимаю player
как изменчивый.