在阅读《铁 rust 书》Chapter 12.4篇时,我偶然发现了这个功能:
pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
vec![]
}
我理解为什么代码在没有contents
参数和返回值的显式生命周期注释的情况下无法编译——lifetime elision rules不适用于至少有两个borrow 参数的函数.
但我很好奇query
参数的隐式生命周期 注释是什么.我可以想到两种情况:
// Scenario 1
pub fn search<'a>(query: &'a str, contents: &'a str) -> Vec<&'a str> {
vec![]
}
// Scenario 2
pub fn search<'a, 'b>(query: &'b str, contents: &'a str) -> Vec<&'a str> {
vec![]
}
这两种情况都可以编译,所以query
可以得到生存期'a
或'b
.哪一个是正确的?