LINUX.ORG.RU

История изменений

Исправление DarkEld3r, (текущая версия) :

как быть?

Покажи пример того, что тебе надо. Вообще чтобы возвращать ссылку надо гарантировать, что она будет жива после возврата из функции. Очевидно, что вот так написать нельзя:

fn foo() -> &i32 {
    &10
}
Но это и логично - мы возвращаем ссылку на стековую переменную. Вот так можно:
fn f1(a: &i32) -> &i32 {
    a
}

static N: i32 = 5;
fn f2() -> &'static i32 {
    &N
}

struct Test {
    a: i32,
}

fn f3(test: &Test) -> &i32 {
    &test.a
}

struct T<'a, 'b> {
    v1: &'a i32,
    v2: &'b i32,
}

fn get_v1<'a, '_>(t: &T<'a, '_>) -> &'a i32 {
    t.v1
}
В первом случае мы получили на вход ссылку с каким-то лайфтаймом, её же и возвращаем. Во втором случае возвращаем ссылку на статик переменную, а они живут всё время жизни программы. В третьем время жизни структуры и её членов совпадает. Ну и в последнем случае у нас есть структура с двумя ссылками - мы просто говорим, что время жизни возвращаемой ссылки будет соответствовать времени жизни конкретного поля структуры.

А лучше почитай официальный мануал.

Исходная версия DarkEld3r, :

как быть?

Покажи пример того, что тебе надо. Вообще чтобы возвращать ссылку надо гарантировать, что она будет жива после возврата из функции. Очевидно, что вот так написать нельзя:

fn foo() -> &i32 {
    &10
}
Но это и логично - мы возвращаем ссылку на стековую переменную. Вот так можно:
fn f1(a: &i32) -> &i32 {
    a
}

static N: i32 = 5;
fn f2() -> &'static i32 {
    &N
}

struct Test {
    a: i32,
}

fn f3(test: &Test) -> &i32 {
    &test.a
}

struct T<'a, 'b> {
    v1: &'a i32,
    v2: &'b i32,
}

fn get_v1<'a, '_>(t: &T<'a, '_>) -> &'a i32 {
    t.v1
}
В первом случае мы получили на вход ссылку с каким-то лайфтаймом, её же и возвращаем. Во втором случае возвращаем ссылку на статик переменную, а они живут всё время жизни программы. В третьем время жизни структуры и её членов совпадает. Ну и в последнем случае у нас есть структура с двумя ссылками - мы просто говорим, что время жизни возвращаемой ссылки будет соответствовать времени жизни конкретного поля структуры.