當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。