Добавлен модуль использования Variant

This commit is contained in:
Alexander Zhirov 2025-05-18 13:42:08 +03:00
parent 16c77dc28d
commit 516b80c0d0
5 changed files with 57 additions and 1 deletions

View file

@ -0,0 +1,49 @@
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)));
}