Ответ 1
Старая черта Show
была разделена на Display
и Debug
.
-
Display
предназначен для вывода, обращенного к пользователю, и использует спецификатор формата пустой/по умолчанию (например,{}
,{:.10}
{foo:}
все используютDisplay
) -
Debug
предназначен для отладки/внутреннего вывода и использует спецификатор формата?
(например,{:?}
,{:.10?}
,{foo:?}
все используютDebug
)
Следовательно, для использования реализации, созданной #[derive(Debug)]
, следует написать println!("{:?}", ...)
вместо старого println!("{}", ...)
.
Только Debug
может быть #[derive]
d, так как вывод, подобный Foo { x: 1, y: 2 }
, вряд ли будет правильным выходом для пользователя, для большинства ситуаций (я уверен, что это для некоторых, но тогда программист может написать реализация Display
, чтобы сделать это сами, или даже вызвать непосредственно в реализацию #[derive]
d Debug
).
Это было изначально описано в RFC 504 и продолжается обсуждение в RFC 565, сделав изложенные выше рекомендации более конкретными.