本文簡要介紹rust語言中 Trait std::fmt::Debug
的用法。
用法
pub trait Debug {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>;
}
?
格式化。
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 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 Default用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Trait std::fmt::Debug。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。