我应该实现Display或ToString将类型呈现为字符串吗?

Ray*_*Ray 9 string rust

我有一种类型Foo,我希望能够作为字符串显示给最终用户,通过实现Display或实现这样做是否更惯用ToString

如果Display是要走的路,我怎么会最终得到一个String?我怀疑我需要使用write!,但我不完全确定如何.

Vla*_*eev 10

您不应ToString手动实施.该ToString特点已经为它们实现所有类型的实现fmt::Display:

impl<T> ToString for T
where
    T: Display + ?Sized, 
{ /* ... */ }
Run Code Online (Sandbox Code Playgroud)

如果您实施Display,to_string()将自动提供您的类型.

fmt::Display对于应该向用户显示的那些选择的几种类型,应该手动实现,同时fmt::Debug期望以最能很好地表示其内部的方式为所有类型实现(对于大多数类型,这意味着它们应该具有#[derive(Debug)]它们) ).

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

RFC 565定义了何时使用fmt::Debug和的指南fmt::Display.