fn main() {
let string1 = String::from("long string is long");
{
let string2 = String::from("xyz");
let result = longest(string1.as_str(), string2.as_str());
println!("The longest string is {}", result);
}
}
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
这是这里的一个例子 rust book,代码自上而下执行,在调用 longest
时,string1 跟 string2 都是传递有效的引用,而且会进入longest
函数里面执行,那既然都是有效的引用,那么函数接收的也是有效的,为何会无法确定生命周期?或者说为啥要确定生命周期?
rust 折磨我千百遍,我却待它如初恋,望大佬解答!
在Rust中所有引用类型的参数都存在独立的生命周期,例如'a, 'b等。
在不进行显式生命周期标注的情况下。编译器进行的生命周期标注为:
此时编译器无法针对返回值的生命周期做出正确的标注。故而,需要显示的进行生命周期标注。
参考:生命周期:你创建的值究竟能活多久?