// 定义结构体,包含两个不同生命周期的字符串切片
struct StringContainer<'a, 'b> {
first: &'a str,
second: &'b str,
}
// 为结构体实现方法,返回其中一个切片
impl<'a, 'b> StringContainer<'a, 'b> {
fn get_first(&self) -> &'a str {
self.first
}
}
fn main() {
let s1 = "Hello";
let s2 = "World";
let container = StringContainer { first: s1, second: s2 };
let result = container.get_first();
println!("{}", result);
}
生命周期标注解释
struct StringContainer<'a, 'b>
:这里定义了结构体StringContainer
,它有两个泛型生命周期参数'a
和'b
。这两个参数表示结构体中两个字符串切片first
和second
的生命周期。'a
表示first
切片的生命周期,'b
表示second
切片的生命周期,它们可以是不同的。
fn get_first(&self) -> &'a str
:在impl
块中定义了get_first
方法。方法签名中的&self
表示对结构体的不可变引用,由于结构体中的first
切片具有生命周期'a
,所以返回的切片也必须具有相同的生命周期'a
,这样就保证了返回的切片在其生命周期内是有效的,不会出现悬空引用。在main
函数中,创建了StringContainer
实例,并调用get_first
方法,确保了返回的切片在使用时仍然有效。