49 lines
1.5 KiB
D
49 lines
1.5 KiB
D
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)));
|
||
}
|