Когда функция может вернуть ссылку? - PullRequest
0 голосов
/ 13 апреля 2020

Я экспериментировал с Rust и обнаружил странность, которую не могу понять. Обычно компилятор запрещает функции возвращать ссылку без продолжительности жизни c (например, String или &'static str, но никогда &str).

Однако этот код скомпилирован и работает:

fn f(_: &Vec<u8>) -> &str {
    "Hello, world!"
}

Принимая во внимание, что этот код не:

fn f() -> &str {
    "Hello, world!"
}

Почему первая функция работает, когда она возвращает ссылку на пропущенное значение?

1 Ответ

4 голосов
/ 13 апреля 2020

Это жизненное разрешение , которое не работает с функциями без входных параметров.

Первый метод расширен до следующего:

fn f<'a>(_: &'a Vec<u8>) -> &'a str {

Второй метод это пример 'НЕЗАКОННОГО' из связанного do c.

Так что вы должны определить его самостоятельно:

fn f<'a>() -> &'a str {

... или stati c:

fn f() -> &'static str {
...