// 定义泛型结构体Container
struct Container<'a, T> {
value: T,
operation: Box<dyn Fn(&'a T) -> () + 'a>,
}
// 初始化函数
impl<'a, T> Container<'a, T> {
fn new(value: T, operation: impl Fn(&'a T) -> () + 'a) -> Self {
Container {
value,
operation: Box::new(operation),
}
}
}
生命周期标注说明
'a
:这是一个生命周期参数,在结构体定义Container<'a, T>
中使用。它被用于标注闭包operation
,表明闭包内部使用的对T
类型值的引用(即&'a T
)的生命周期是'a
。这意味着闭包operation
在其整个生命周期内,所引用的值的生命周期必须至少为'a
。
impl<'a, T>
:在实现块中也使用了相同的生命周期参数'a
,以确保结构体实现中的所有操作都与结构体定义中的生命周期要求一致。
new
函数:在new
函数的参数列表中,operation: impl Fn(&'a T) -> () + 'a
,这个参数要求传入的闭包接受一个生命周期为'a
的对T
类型值的引用,并且闭包自身的生命周期也是'a
。这样能保证闭包在使用value
时,value
的生命周期足够长。Box::new(operation)
将闭包装箱,以满足operation
字段的Box<dyn Fn(&'a T) -> () + 'a>
类型要求。