Почему время жизни А должно быть больше, чем у коробки?+ 'a>? - PullRequest
0 голосов
/ 22 сентября 2018

В этот код , почему время жизни A должно быть больше, чем 'a для Box<Fn<A, Output = ()> + 'a>?

#![feature(unboxed_closures)]

trait Tt {}

struct S<'a, A: Copy + 'a> {
    x: Box<Fn<A, Output = ()> + 'a>,
}

fn add<'a, A: Copy + 'a>(x: Box<Fn<A, Output = ()> + 'a>) -> Box<dyn Tt + 'a> {
    Box::new(S::<'a, A> { x })
}

impl<'a, A: Copy + 'a> Tt for S<'a, A> {}

A - список аргументов Fn<A, Output = ()>.Почему время жизни A не является продолжительностью звонка Fn<A, Output = ()>, а вместо длиннее Fn<A, Output = ()>?

ОБНОВЛЕНИЕ 1

Если A не указано, если время жизни явно больше 'a, компилятор выдаст ошибку the parameter type `A` may not live long enough.

#![feature(unboxed_closures)]

trait Tt {}

struct S<'a, A: Copy> {
    x: Box<Fn<A, Output = ()> + 'a>,
}

fn add<'a, A: Copy>(x: Box<Fn<A, Output = ()> + 'a>) -> Box<dyn Tt + 'a> {
    Box::new(S::<'a, A> { x })
}

impl<'a, A: Copy> Tt for S<'a, A> {}

A - это список аргументов Fn<A, Output = ()>, который должен быть активен с начала до конца вызова Fn<A, Output = ()>. Я думаю, что время жизни A не должно зависеть от времени жизни Fn<A, Output = ()>.Но для компилятора требуется, чтобы время жизни A было больше, чем Fn<A, Output = ()>, то есть 'a.Почему?

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