Rust代码中fmt::Formatter<'_>里的<'_>语法是什么含义
fmt::Formatter<'_>中<'_>的语法含义 '_是Rust 2018版本稳定的匿名生命周期占位符,用来简化不需要显式命名生命周期的代码场景,针对这段示例代码的具体解释如下:
- 首先
std::fmt::Formatter本身是携带一个生命周期参数的泛型结构体,原生定义签名为pub struct Formatter<'a>,使用时必须为这个泛型生命周期参数指定具体的生命周期约束。 - 在
'_语法正式推出前,实现Debugtrait的fmt方法必须手动声明生命周期参数,和示例代码完全等价的旧写法如下:
impl fmt::Debug for Point { // 手动声明生命周期'a,绑定到Formatter的泛型参数上 fn fmt<'a>(&self, f: &mut fmt::Formatter<'a>) -> fmt::Result { f.debug_struct("Point") .field("x", &self.x) .field("y", &self.y) .finish() } }
- 示例里写的
'_,作用就是告诉编译器:这个位置的生命周期参数不需要开发者手动命名和声明,直接按照上下文的生命周期规则自动推导即可。在这个场景下,编译器会自动把这个匿名生命周期绑定到传入参数f本身的可变引用生命周期,完全符合Rust借用检查规则,不会引入任何生命周期安全问题。 - 设计这个语法的核心目的就是减少无意义的样板代码:很多场景下开发者不需要关心某个泛型上的生命周期具体标识是什么,只要编译器能正确推导出合法的约束即可,
'_就是为这类场景提供的简写方式。
常见误区提醒:
'_不代表“任意生命周期”,也不代表'static静态生命周期,它只是省略了显式的生命周期命名,最终生成的生命周期约束和手写显式生命周期的效果完全一致。
内容的提问来源于stack exchange,提问作者lijeles952
相关产品推荐
相关产品推荐

