我查看了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:
标记向读者表明借款正在发生,否则可能不会清楚。