Плейсхолдер {:#?
Плейсхолдер {:#?} используется в макросах форматирования
для вывода отладочной информации в «красивом» виде. Он работает
аналогично плейсхолдеру {:?}, но добавляет альтернативное
форматирование: вложенные элементы структур, перечислений,
массивов и векторов выводятся с отступами и переносами строк.
Параметром плейсхолдер принимает значение, реализующее трейт
Debug.
Такой вывод особенно удобен при отладке сложных вложенных
структур данных, когда обычный {:?} выводит всё
в одну длинную строку.
Синтаксис
println!("{:#?}", value);
Пример
Давайте выведем вектор чисел с помощью плейсхолдера
{:#?}:
fn main()
{
let res = vec![1, 2, 3, 4, 5];
println!("{:#?}", res);
}
Результат выполнения кода:
[
1,
2,
3,
4,
5,
]
Пример
Сравните с обычным отладочным выводом через {:?}:
fn main()
{
let res = vec![1, 2, 3, 4, 5];
println!("{:?}", res);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Пример
Давайте выведем вектор строк с помощью плейсхолдера
{:#?}:
fn main()
{
let res = vec!["a", "b", "c", "d", "e"];
println!("{:#?}", res);
}
Результат выполнения кода:
[
"a",
"b",
"c",
"d",
"e",
]
Пример
Плейсхолдер {:#?} особенно полезен для вложенных
структур. Давайте выведем вектор векторов:
fn main()
{
let res = vec![vec![1, 2], vec![3, 4]];
println!("{:#?}", res);
}
Результат выполнения кода:
[
[
1,
2,
],
[
3,
4,
],
]
Пример
Давайте применим плейсхолдер {:#?} к кортежу:
fn main()
{
let res = (1, "abcde", 3.14);
println!("{:#?}", res);
}
Результат выполнения кода:
(
1,
"abcde",
3.14,
)