Почему # [diverve (Show)] больше не работает?
4267 просмотра
2 ответа
С сегодняшним Rust nightly следующий код больше не компилируется:
#[derive(Show)]
enum S {
A,
B
}
fn main() {
println!("{}", S::A);
}
Вместо этого он дает мне следующее сообщение об ошибке:
error: the trait `core::fmt::String` is not implemented for the type `S`
Есть ли способ получить старое поведение? Конечно, это не может потребоваться реализовать вручную для каждого типа.
Автор: ujh Источник Размещён: 12.11.2019 09:14Ответы (2)
33 плюса
Старая 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]
д Debug
реализации).
Первоначально это было описано в RFC 504, и в RFC 565 продолжается обсуждение , что делает изложенные выше руководящие принципы более конкретными.
Автор: huon Размещён: 10.01.2015 02:085 плюса
Вопросы из категории :
- rust Розетки в Русте
- rust Как вы делаете диапазон в Rust?
- rust Сопоставление ржавчины с вектором
- rust Программы бенчмаркинга в Rust
- rust Что такое мономорфизация с контекстом на C ++?
- rust Как получить доступ к параметрам командной строки?
- rust Можем ли мы создать пользовательские Rust-операторы?
- rust Как обрабатывать длительные вызовы внешних функций, такие как блокировка ввода-вывода в Rust?
- rust Возможно ли сделать рекурсивное замыкание в Rust?
- rust Создание кроссплатформенного приложения (с использованием Rust)
- rust-obsolete Сравнение строки со статической строкой
- rust-obsolete Как я могу генерировать случайное число в пределах диапазона в Rust?
- rust-obsolete Объявление массива с использованием константного выражения для его размера
- rust-obsolete Как получить квадратный корень в Rust 0.13.0?
- rust-obsolete Почему # [diverve (Show)] больше не работает?
- rust-obsolete Что является современным аналогом устаревшего std :: raw :: Repr?