我在查看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())
}
})
}
Run Code Online (Sandbox Code Playgroud)
我知道 '_ 指的是匿名生命周期,但我不确定它在这种情况下意味着什么。希望得到一些澄清。谢谢。
aed*_*edm 11
这是一个简写
pub fn tokenize<'a>(input: &'a str) -> impl Iterator<Item = Token> + 'a { ... }
Run Code Online (Sandbox Code Playgroud)
Rust 有时允许您在声明明确时避免声明生命周期:
fn foo(input: &'a str) -> &'a str { ... }
// same as
fn foo(input: &str) -> &str { ... }
Run Code Online (Sandbox Code Playgroud)
但在上面的代码中,返回类型不是引用,因此不能使用这种简写。'_是这种情况的语法糖。
但为什么也无法'_逃避呢?这是RFC 2115: argument_lifetimes的答案:
'_ 标记向读者清楚地表明正在发生借用,否则可能不清楚。
| 归档时间: |
|
| 查看次数: |
2567 次 |
| 最近记录: |