Struct alloc::fmt::DebugMap 1.2.0[−][src]
#[must_use = "must eventually call `finish()` on Debug builders"]pub struct DebugMap<'a, 'b> where
'b: 'a, { /* fields omitted */ }
Expand description
一个有助于 fmt::Debug
实现的结构体。
当您希望输出格式化的 map 作为 Debug::fmt
实现的一部分时,此功能很有用。
这可以通过 Formatter::debug_map
方法创建。
Examples
use std::fmt; struct Foo(Vec<(String, i32)>); impl fmt::Debug for Foo { fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { fmt.debug_map().entries(self.0.iter().map(|&(ref k, ref v)| (k, v))).finish() } } assert_eq!( format!("{:?}", Foo(vec![("A".to_string(), 10), ("B".to_string(), 11)])), "{\"A\": 10, \"B\": 11}", );Run
Implementations
在 map 输出中添加一个新条目。
Examples
use std::fmt; struct Foo(Vec<(String, i32)>); impl fmt::Debug for Foo { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { fmt.debug_map() .entry(&"whole", &self.0) // 我们添加 "whole" 条目。 .finish() } } assert_eq!( format!("{:?}", Foo(vec![("A".to_string(), 10), ("B".to_string(), 11)])), "{\"whole\": [(\"A\", 10), (\"B\", 11)]}", );Run
将新条目的关键部分添加到 map 输出中。
该方法与 value
一起,是 entry
的替代方法,可以在事先不知道完整条目的情况下使用。
尽可能使用 entry
方法。
Panics
key
必须在 value
之前调用,并且对 key
的每次调用都必须后面跟随对 value
的相应调用。
否则,此方法将为 panic。
Examples
use std::fmt; struct Foo(Vec<(String, i32)>); impl fmt::Debug for Foo { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { fmt.debug_map() .key(&"whole").value(&self.0) // 我们添加 "whole" 条目。 .finish() } } assert_eq!( format!("{:?}", Foo(vec![("A".to_string(), 10), ("B".to_string(), 11)])), "{\"whole\": [(\"A\", 10), (\"B\", 11)]}", );Run
将新条目的值部分添加到 map 输出中。
该方法与 key
一起,是 entry
的替代方法,可以在事先不知道完整条目的情况下使用。
尽可能使用 entry
方法。
Panics
key
必须在 value
之前调用,并且对 key
的每次调用都必须后面跟随对 value
的相应调用。
否则,此方法将为 panic。
Examples
use std::fmt; struct Foo(Vec<(String, i32)>); impl fmt::Debug for Foo { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { fmt.debug_map() .key(&"whole").value(&self.0) // 我们添加 "whole" 条目。 .finish() } } assert_eq!( format!("{:?}", Foo(vec![("A".to_string(), 10), ("B".to_string(), 11)])), "{\"whole\": [(\"A\", 10), (\"B\", 11)]}", );Run
将条目迭代器的内容添加到 map 输出中。
Examples
use std::fmt; struct Foo(Vec<(String, i32)>); impl fmt::Debug for Foo { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { fmt.debug_map() // 我们将 vec 设为 map,因此每个条目的第一个字段将成为 "key"。 .entries(self.0.iter().map(|&(ref k, ref v)| (k, v))) .finish() } } assert_eq!( format!("{:?}", Foo(vec![("A".to_string(), 10), ("B".to_string(), 11)])), "{\"A\": 10, \"B\": 11}", );Run
完成输出并返回遇到的任何错误。
Panics
key
必须在 value
之前调用,并且对 key
的每次调用都必须后面跟随对 value
的相应调用。
否则,此方法将为 panic。
Examples
use std::fmt; struct Foo(Vec<(String, i32)>); impl fmt::Debug for Foo { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { fmt.debug_map() .entries(self.0.iter().map(|&(ref k, ref v)| (k, v))) .finish() // 结束结构体格式化。 } } assert_eq!( format!("{:?}", Foo(vec![("A".to_string(), 10), ("B".to_string(), 11)])), "{\"A\": 10, \"B\": 11}", );Run