本文简要介绍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 版本而改变。此外,标准库(libstd
、libcore
、liballoc
等)提供的类型的 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 DebugList.entries用法及代码示例
- Rust DebugList用法及代码示例
- Rust DebugMap.key用法及代码示例
- Rust DebugStruct.finish_non_exhaustive用法及代码示例
- Rust DebugStruct.field用法及代码示例
- Rust DebugTuple.finish用法及代码示例
- Rust Debug用法及代码示例
- Rust DebugStruct用法及代码示例
- Rust DebugStruct.finish用法及代码示例
- Rust DebugMap.entries用法及代码示例
- Rust DebugSet.finish用法及代码示例
- Rust DebugMap.entry用法及代码示例
- Rust DebugMap.value用法及代码示例
- Rust DebugSet.entry用法及代码示例
- Rust DebugMap.finish用法及代码示例
- Rust DebugSet用法及代码示例
- Rust DebugTuple.field用法及代码示例
- Rust DebugTuple用法及代码示例
- Rust DebugList.finish用法及代码示例
- Rust DebugList.entry用法及代码示例
- Rust DebugSet.entries用法及代码示例
- Rust DebugMap用法及代码示例
- Rust Debug.fmt用法及代码示例
- Rust DerefMut用法及代码示例
- Rust Default.default用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Trait core::fmt::Debug。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。