Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Разнородные данные с 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, и выводим все элементы коллекции на экран.