dyn Trait для динамической диспетчеризации в Rust
// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0
pub trait Trait {}
impl Trait for i32 {}
impl Trait for String {}
fn main() {
let int: &dyn Trait = &42i32;
let string: &dyn Trait = &String::from("Hello dyn!");;
}
-
Динамическая диспетчеризация — инструмент объектно-ориентированного программирования, который часто используют там, где важнее поведение типа, а не то, чем тип является.
В ООП-языках динамическая диспетчеризация часто происходит неявно, и от неё нельзя отказаться.
В Rust используется
dyn Trait: динамическая диспетчеризация, которую нужно включить явно. -
Для любого трейта, который совместим с dyn, можно привести ссылку на значение этого трейта к значению
dyn Trait. -
Их называют объектами трейтов. Их тип неизвестен на этапе компиляции, но поведение известно: оно задаётся самим трейтом.
-
Когда вам действительно нужны разнородные структуры данных в стиле ООП, можно использовать
Box<dyn Trait>, но сначала постарайтесь сохранить однородность и опираться на обобщения!