当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Debug用法及代码示例


本文简要介绍rust语言中 Trait core::fmt::Debug 的用法。

用法

pub trait Debug {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result;
}

? 格式化。

Debug 应该在面向程序员的调试上下文中格式化输出。

一般来说,你应该只是derive一个Debug实现。

当与备用格式说明符 #? 一起使用时,输出为 pretty-printed。

有关格式化程序的更多信息,请参阅the module-level documentation

如果所有字段都实现 Debug ,则此特征可以与 #[derive] 一起使用。当 derive d 用于结构时,它将使用 struct 的名称,然后是 { ,然后是每个字段名称和 Debug 值的逗号分隔列表,然后是 } 。对于 enum ,它将使用变体的名称,如果适用的话,使用 ( ,然后使用字段的 Debug 值,然后使用 )

稳定

派生的 Debug 格式不稳定,因此可能会随着未来的 Rust 版本而改变。此外,标准库(libstdlibcoreliballoc 等)提供的类型的 Debug 实现不稳定,并且可能会随着未来的 Rust 版本而改变。

例子

派生实现:

#[derive(Debug)]
struct Point {
    x: i32,
    y: i32,
}

let origin = Point { x: 0, y: 0 };

assert_eq!(format!("The origin is: {:?}", origin), "The origin is: Point { x: 0, y: 0 }");

手动实现:

use std::fmt;

struct Point {
    x: i32,
    y: i32,
}

impl fmt::Debug for Point {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.debug_struct("Point")
         .field("x", &self.x)
         .field("y", &self.y)
         .finish()
    }
}

let origin = Point { x: 0, y: 0 };

assert_eq!(format!("The origin is: {:?}", origin), "The origin is: Point { x: 0, y: 0 }");

Formatter 结构上有许多帮助方法可以帮助您手动实现,例如 debug_struct

使用 derive Formatter 上的调试生成器 API 实现的 Debug 支持使用备用标志 pretty-printing: {:#?}

Pretty-printing 与 #?

#[derive(Debug)]
struct Point {
    x: i32,
    y: i32,
}

let origin = Point { x: 0, y: 0 };

assert_eq!(format!("The origin is: {:#?}", origin),
"The origin is: Point {
    x: 0,
    y: 0,
}");

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Trait core::fmt::Debug。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。