面试题答案
一键面试struct Wrapper<T> {
data: T,
}
impl<T> Wrapper<T> {
fn transform<F>(self, f: F) -> Wrapper<T>
where
F: FnOnce(T) -> T,
{
Wrapper {
data: f(self.data),
}
}
}
生命周期标注解释
在这段代码中,由于transform
方法使用self
来接收结构体实例,意味着会消耗当前实例。闭包F
接受T
类型的值,并返回T
类型的值,整个过程不涉及引用,因此不需要显式的生命周期标注。如果data
是引用类型,transform
方法接受的闭包需要正确处理引用的生命周期。例如,如果data
是&'a T
类型,闭包F
需要接受并返回相同生命周期的引用&'a T
,在这种情况下,impl
块中需要对F
添加生命周期约束F: FnOnce(&'a T) -> &'a T
。但在本题的需求下,data
类型是T
,不涉及引用生命周期问题,所以代码简洁且无需显式生命周期标注。