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 を実装する型を格納し、そのコレクション内の すべての要素を画面に出力しています。