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

Should I implement Display or ToString to render a type as a string?

我有一个类型 Foo,我希望能够将其作为字符串显示给最终用户,通过实现 Display or by implementing ToString 来执行此操作是否更符合习惯?

如果 Display 是要走的路,我将如何最终得到 String?我怀疑我需要使用 write!,但我不确定如何使用。

您不应手动实施 ToStringToString 特性已经为实现 fmt::Display:

的所有类型实现
impl<T> ToString for T
where
    T: Display + ?Sized, 
{ /* ... */ }

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

fmt::Display is intended to be implemented manually for those select few types which should be displayed to the user, while fmt::Debug 预计将以最能代表其内部结构的方式为 所有 类型实现(对于大多数类型,这意味着它们应该具有 #[derive(Debug)] 在他们身上)。

为了获得 fmt::Debug 输出的字符串表示,您需要使用 format!("{:?}", value),其中 {:?} 是实现 fmt::Debug.[= 的类型的占位符28=]

RFC 565 定义了何时使用 fmt::Debugfmt::Display.

的指南