小编whi*_*run的帖子

为什么 Rust 调试特性的实现使用 Formatter<'_> 类型省略

很久以前我就有这个问题,从我开始学习 Rust 的第一天起。我了解到 for 的实现std::fmt::Debug有一个函数签名

fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result.

起初我只是复制这个签名并将其视为标准样板代码。然而,随着我学到的更多,我意识到这<'_>意味着终生省略。我做了一些研究,根据问题 #49469 <'_>可以让返回值根据参数推断其生命周期(这真的很酷)。但我也看到人们<'_>广泛使用with 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);
}
Run Code Online (Sandbox Code Playgroud)

它编译并运行。那么<'_>这里有一些我不知道的边缘情况的特殊用法吗?

提前致谢。

rust

4
推荐指数
1
解决办法
146
查看次数

标签 统计

rust ×1