面试题答案
一键面试create_foo
函数中生命周期参数'a
的工作原理
- 参数传递:
create_foo
函数接收一个类型为&'a str
的参数s
。这里的生命周期参数'a
表示s
所引用的数据的生命周期。- 生命周期参数
'a
的作用是确保s
所引用的数据在create_foo
函数调用期间是有效的。例如,如果调用create_foo
的代码块中创建了一个临时字符串字面量并传递给create_foo
,'a
会保证这个临时字符串字面量在create_foo
函数执行期间不会被释放。
- 返回值:
- 函数返回一个
Foo<'a>
类型的实例。Foo<'a>
结构体中有一个成员data
,其类型为&'a str
。这意味着create_foo
返回的Foo
实例中的data
引用与传入的s
引用具有相同的生命周期'a
。 - 这确保了返回的
Foo
实例中的data
引用在其生命周期内不会悬空。例如,如果create_foo
返回的Foo
实例被存储在某个变量中,只要该变量在其作用域内有效,data
所引用的数据也必须有效。
- 函数返回一个
修改为接收String
类型参数并返回Foo
struct Foo {
data: String
}
fn create_foo(s: String) -> Foo {
Foo { data: s }
}
在这种情况下,不需要显式的生命周期参数。因为String
拥有它所包含的数据,而不是引用外部数据。create_foo
函数接收String
类型的参数s
,并将其移动到Foo
结构体的data
成员中。这样,Foo
结构体拥有了数据的所有权,不存在生命周期问题(因为不需要处理引用的生命周期)。