函数返回类型中的匿名生存期



我查看了Rust的源代码,发现了这个函数。

pub fn tokenize(input: &str) -> impl Iterator<Item = Token> + '_ {
let mut cursor = Cursor::new(input);
std::iter::from_fn(move || {
if cursor.is_eof() {
None
} else {
cursor.reset_len_consumed();
Some(cursor.advance_token())
}
})
}

我知道"_"指的是匿名的一生,但我不确定在这种情况下它意味着什么。我很想得到一些澄清。谢谢

这是的简写

pub fn tokenize<'a>(input: &'a str) -> impl Iterator<Item = Token> + 'a { ... }

Rust有时允许您在声明不明确的情况下避免声明生存期:

fn foo(input: &'a str) -> &'a str { ... }
// same as
fn foo(input: &str) -> &str { ... }

但是在上面的代码中,返回类型不是引用,所以不能使用这种简写。'_是这种情况下的句法糖。

但是,为什么'_也不能逃脱呢?以下是RFC 2115的答案:argument_lifetimes:

标记向读者表明借款正在发生,否则可能不会清楚。

最新更新