Возврат структуры, ссылающейся на новый & str - PullRequest
0 голосов
/ 21 сентября 2019

В настоящее время я пишу программу, и в какой-то момент мне приходится иметь дело со структурой, содержащей значения &str.Давайте рассмотрим, как это выглядит:

struct Book<'a> {
    url: &'a str,
}

У меня есть функция, которая выбирает книгу из удаленного хранилища и возвращает URL-адрес, указывающий на эту книгу, который выглядит следующим образом:

fn fetch_book<'a>(id: u64) -> Book<'a> {
  // do some stuff to get a 'key' variable that allows to access the book
  Book {
    // Here we turn the formatted String into an &str
    url: &format!("https://<ip-address>/books?id={}&key={}", id, key)
  }
}

Эта функция не будет компилироваться, потому что Rust сообщает, что мы возвращаем значение, которое ссылается на данные, принадлежащие текущей функции.

Итак, что я могу сделать, чтобы эта функция работала правильно (без перехода unsafe)?

1 Ответ

0 голосов
/ 21 сентября 2019

Как отметил @ DenysSéguret в комментариях:

В конце функции созданные значения либо удаляются, либо перемещаются.Если вы не переместите str (то есть верните его в структуре-владельце), оно будет удалено, и ссылки на него больше не будут иметь смысла.

Плюс, согласно этому вопросу , опубликованный на форуме пользователей Rust, действительно невозможно вернуть &str из "только что созданной" строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...