从我开始学习rust的第一天起,我就一直有这个问题。我了解到std::fmt::Debug
的实现具有以下函数签名:
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result
。
起初,我只是复制这个签名,并将其视为标准的样板代码。然而,随着我的学习深入,我意识到<'_>
表示生命周期省略。我进行了一些研究,根据issue#49469,<'_>
可以使返回值根据参数来推断它的生命期(这真的很酷)。但是,我也看到人们在fmt::Formatter
中广泛使用<'_>
,例如标准库文档和mio,在这些情况下,<'_>
不应更改默认的生命周期推断行为。此外,我使用以下代码进行了快速测试:
use std::fmt;
struct Test();
impl fmt::Debug for Test {
fn fmt(&self,fmt:&mut fmt::Formatter) -> fmt::Result {
write!(fmt,"test")?;
Ok(())
}
}
fn main() {
let t = Test();
println!("{:?}",t);
}
它可以编译和运行。那么在这里使用的
<'_>
是否具有一些我不知道的特殊用途或边缘情况呢?提前致谢。