我应该实现 Display 还是 ToString 以将类型呈现为字符串



我有一个类型Foo,我希望能够以字符串的形式显示给最终用户,通过实现Display还是通过实现ToString来做到这一点更习惯?

如果Display是要走的路,我实际上如何最终得到一个String?我怀疑我需要利用write!,但我不完全确定如何。

您不应手动实现ToStringToString特征已经实现到所有实现fmt::Display的类型:

impl<T> ToString for T
where
    T: Display + ?Sized, 
{ /* ... */ }

如果实现 Displayto_string()将自动在您的类型上可用。

fmt::Display旨在为那些应该向用户显示的少数类型手动实现,而fmt::Debug 预计将以最能代表其内部的方式为所有类型实现(对于大多数类型,这意味着它们应该具有#[derive(Debug)])。

为了获得fmt::Debug输出的字符串表示,你需要使用format!("{:?}", value){:?}是实现fmt::Debug的类型的占位符。

RFC 565 定义了何时使用 fmt::Debugfmt::Display 的准则。

相关内容

最新更新