module examples.common.variant; import std.variant; import std.container; import std.stdio : writeln; import std.array : array; // Возвращает Variant с разными типами в зависимости от arg. private auto getValue(int arg) { /** * `Variant` в D — это тип из модуля `std.variant`, * который может хранить значение любого типа * (int, string, объекты, списки и т.д.) и позволяет * динамически определять его тип во время выполнения. * Используется для гибкой работы с данными, * когда тип заранее неизвестен. */ Variant result; if (arg == 1) { result = 42; // int } else if (arg == 2) { result = "Hello, D!"; // string } else { DList!int list = [1, 2, 3]; // DList!int result = list; } return result; } // Показывает типы и значения, возвращаемые getValue. void fVariant() { // Вывод для arg=1 (int) writeln("Тип при arg=1: ", getValue(1).type, ", значение: ", getValue(1)); // Вывод для arg=2 (string) writeln("Тип при arg=2: ", getValue(2).type, ", значение: ", getValue(2)); // Вывод для arg=0 (DList!int) auto listVariant = getValue(0); writeln("Тип при arg=0: ", listVariant.type, ", значение: ", array( listVariant.get!(DList!int))); }