为什么Box <fn <a,output =“()”> +'a>的A生存期必须比'a长?

时间:2018-09-22 15:19:14

标签: rust

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

If A isn't specified any lifetime longer than 'a explicitly, the compiler will raise a error the parameter type `A` may not live long enough.

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 = ()>。为什么?

0 个答案:

没有答案