当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Formatter.debug_set用法及代码示例


本文简要介绍rust语言中 core::fmt::Formatter.debug_set 的用法。

用法

pub fn debug_set<'b>(&'b mut self) -> DebugSet<'b, 'a>

创建一个DebugSet 构建器,旨在帮助为set-like 结构创建fmt::Debug 实现。

例子

use std::fmt;

struct Foo(Vec<i32>);

impl fmt::Debug for Foo {
    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
        fmt.debug_set().entries(self.0.iter()).finish()
    }
}

assert_eq!(format!("{:?}", Foo(vec![10, 11])), "{10, 11}");

在这个更复杂的示例中,我们使用 format_args! .debug_set() 来构建匹配臂列表:

use std::fmt;

struct Arm<'a, L: 'a, R: 'a>(&'a (L, R));
struct Table<'a, K: 'a, V: 'a>(&'a [(K, V)], V);

impl<'a, L, R> fmt::Debug for Arm<'a, L, R>
where
    L: 'a + fmt::Debug, R: 'a + fmt::Debug
{
    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
        L::fmt(&(self.0).0, fmt)?;
        fmt.write_str(" => ")?;
        R::fmt(&(self.0).1, fmt)
    }
}

impl<'a, K, V> fmt::Debug for Table<'a, K, V>
where
    K: 'a + fmt::Debug, V: 'a + fmt::Debug
{
    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
        fmt.debug_set()
        .entries(self.0.iter().map(Arm))
        .entry(&Arm(&(format_args!("_"), &self.1)))
        .finish()
    }
}

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 core::fmt::Formatter.debug_set。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。