Trait alloc::fmt::Debug1.0.0[][src]

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

? formatting.

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

一般来说,您应该只将 deriveDebug 实现。

当与备用格式说明符 #? 一起使用时,输出将被漂亮地打印。

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

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

Stability

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

Examples

派生实现:

#[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 }");
Run

手动实现:

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 }");
Run

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

Debug 使用 deriveFormatter 上的调试构建器 API 的实现都支持使用 Alternate 标志进行漂亮的打印: {:#?}.

使用 #? 进行漂亮的打印:

#[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,
}");
Run

Required methods

使用给定的格式化程序格式化该值。

Examples

use std::fmt;

struct Position {
    longitude: f32,
    latitude: f32,
}

impl fmt::Debug for Position {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.debug_tuple("")
         .field(&self.longitude)
         .field(&self.latitude)
         .finish()
    }
}

let position = Position { longitude: 1.987, latitude: 2.983 };
assert_eq!(format!("{:?}", position), "(1.987, 2.983)");

assert_eq!(format!("{:#?}", position), "(
    1.987,
    2.983,
)");
Run

Implementations on Foreign Types

Implementors