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

我应该实现Display还是ToString来将类型呈现为字符串?,string,rust,String,Rust,我有一个类型Foo,我希望能够以字符串的形式向最终用户显示,通过实现还是通过实现来实现这一点更为惯用 如果Display是一种方法,那么我将如何以字符串结束呢?我怀疑我需要利用write,但我不完全确定如何实现。您不应该手动实现。所有实现fmt::Display的类型都已经实现了ToString特性: impl<T> ToString for T where T: Display + ?Sized, { /* ... */ } T的impl-ToString 哪里 T:显

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

如果
Display
是一种方法,那么我将如何以
字符串
结束呢?我怀疑我需要利用
write,但我不完全确定如何实现。

您不应该手动实现。所有实现
fmt::Display
的类型都已经实现了
ToString
特性:

impl<T> ToString for T
where
    T: Display + ?Sized, 
{ /* ... */ }
T的impl-ToString
哪里
T:显示器+尺寸,
{ /* ... */ }
如果您实现了
显示
to_string()
将自动在您的类型上可用

旨在为那些应向用户显示的选定少数类型手动实现,而预期为所有类型以最完美地表示其内部的方式实现(对于大多数类型,这意味着它们应该具有
#[派生(调试)]

为了获得
fmt::Debug
输出的字符串表示形式,您需要使用
格式!(“{:?}”,value)
,其中
{:?}
是实现
fmt::Debug
的类型的占位符

定义何时使用
fmt::Debug
fmt::Display
的指导原则