在this code中,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 = ()>
长?
更新1
Fn<A, Output = ()>
#![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 = ()>
。为什么?