Trait std::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

This is supported on (Android or DragonFly BSD or Emscripten or FreeBSD or Linux or NetBSD or OpenBSD) and Unix only.
This is supported on Unix only.
This is supported on Unix only.
This is supported on Unix only.
This is supported on Unix only.

格式化命令的程序和参数以进行显示。 使用 utf8 替换字符有损地转换所有非 utf8 数据。

This is supported on Unix only.
This is supported on (Android or DragonFly BSD or Emscripten or FreeBSD or Linux or NetBSD or OpenBSD) and Unix only.