d-examples/source/examples/common/variant.d

49 lines
1.5 KiB
D
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)));
}