2015-01-04 92 views
3

假设我有一个类型Foo,我希望能够显示为一个字符串,通过实施ToString执行Show来执行此操作更具地道性吗?如果Show是要走的路,我怎么会最终得到String?我怀疑我需要利用write!,但我不完全确定如何。将类型呈现为字符串:Show或ToString?

+0

谁是这个字符串的听众?是为了程序员(你)的便利,还是向最终用户展示? – Shepmaster

+0

@Shepmaster这将是最终用户。 – Ray

回答

5

更新:最近fmt::Show特质已经被分成fmt::Debugfmt::Display。这些性状都具有相同的结构,但它们的语义不同:fmt::Display旨在手动实施,以便选择少量应向用户显示的类型,而fmt::Debug预计将以全部类型以这种方式实现代表它们的内部结构最好(对于大多数类型,这意味着它们应该有#[derive(Debug)])。

ToString特征现在适用于实施fmt::Display的所有类型。为了获得fmt::Debug输出的字符串表示,您需要使用format!("{:?}", value),其中{:?}是实现fmt::Debug的类型的占位符。

This RFC定义何时使用fmt::Debugfmt::Display的指导原则。

由于历史原因,原来的答案在下面。


您不应该手动执行ToString。它只是提供to_string()方法的所有类型的扩展特征,其实现Show,您可以看到它on its documentation page。如果您实施了Show,则to_string()将自动适用于您的类型。

+0

#[derive(Show)]已弃用。寻找替代品... –

+0

它是#[派生(调试)] –

+0

@AndrewWagner,旧'显示'已被分为'显示'和'调试'。你可以在这里找到更多(https://github.com/rust-lang/rfcs/pull/565)。但是,谢谢,我现在就更新我的回答。 –