我应该实施 Display 还是 ToString 来将类型呈现为字符串?
Should I implement Display or ToString to render a type as a string?
我有一个类型 Foo
,我希望能够将其作为字符串显示给最终用户,通过实现 Display
or by implementing ToString
来执行此操作是否更符合习惯?
如果 Display
是要走的路,我将如何最终得到 String
?我怀疑我需要使用 write!
,但我不确定如何使用。
您不应手动实施 ToString
。 ToString
特性已经为实现 fmt::Display
:
的所有类型实现
impl<T> ToString for T
where
T: Display + ?Sized,
{ /* ... */ }
如果您实施 Display
,to_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::Debug
和 fmt::Display
.
的指南
我有一个类型 Foo
,我希望能够将其作为字符串显示给最终用户,通过实现 Display
or by implementing ToString
来执行此操作是否更符合习惯?
如果 Display
是要走的路,我将如何最终得到 String
?我怀疑我需要使用 write!
,但我不确定如何使用。
您不应手动实施 ToString
。 ToString
特性已经为实现 fmt::Display
:
impl<T> ToString for T
where
T: Display + ?Sized,
{ /* ... */ }
如果您实施 Display
,to_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::Debug
和 fmt::Display
.