面试题答案
一键面试- 生命周期标注原则:
- 当方法返回内部
Vec
中某个元素的引用时,返回引用的生命周期应与Container
实例的生命周期相关联。 - 因为
Vec
是Container
的一部分,Vec
中元素的引用生命周期不能长于Container
本身的生命周期。
- 当方法返回内部
- 示例代码:
struct Container {
data: Vec<i32>
}
impl Container {
fn get_ref<'a>(&'a self, index: usize) -> Option<&'a i32> {
self.data.get(index)
}
}
fn main() {
let c = Container { data: vec![1, 2, 3] };
if let Some(ref value) = c.get_ref(1) {
println!("Value at index 1: {}", value);
}
}
在上述代码中:
<'a>
是生命周期参数,它在get_ref
方法定义中声明。&'a self
表示self
(即Container
实例)的引用具有生命周期'a
。-> Option<&'a i32>
表示返回的i32
引用也具有生命周期'a
,这确保了返回的引用不会比Container
实例本身存活得更久,从而避免借用检查错误。