我有一个类型Foo
,我希望能够以字符串的形式显示给最终用户,通过实现Display
还是通过实现ToString
来做到这一点更习惯?
如果Display
是要走的路,我实际上如何最终得到一个String
?我怀疑我需要利用write!
,但我不完全确定如何。
您不应手动实现ToString
。ToString
特征已经实现到所有实现fmt::Display
的类型:
impl<T> ToString for T
where
T: Display + ?Sized,
{ /* ... */ }
如果实现 Display
,to_string()
将自动在您的类型上可用。
fmt::Display
旨在为那些应该向用户显示的少数类型手动实现,而fmt::Debug
预计将以最能代表其内部的方式为所有类型实现(对于大多数类型,这意味着它们应该具有#[derive(Debug)]
)。
为了获得fmt::Debug
输出的字符串表示,你需要使用format!("{:?}", value)
,{:?}
是实现fmt::Debug
的类型的占位符。
RFC 565 定义了何时使用 fmt::Debug
和 fmt::Display
的准则。