Разнородные данные с dyn trait
// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0
use std::fmt::Display;
pub struct Lambda;
impl Display for Lambda {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "λ")
}
}
fn main() {
let heterogeneous: Vec<Box<dyn Display>> = vec![
Box::new(42u32),
Box::new(String::from("Woah")),
Box::new(Lambda),
];
for item in heterogeneous {
// Мы знаем, что «item» реализует Display, но больше ничего не знаем!
println!("Display output: {}", item);
}
}
-
dyn Traitкак инструмент динамической диспетчеризации позволяет хранить разнородные данные в коллекциях. -
В этом примере мы храним типы, которые все реализуют
std::fmt::Display, и выводим все элементы коллекции на экран.