Добавлен модуль использования Variant
This commit is contained in:
parent
16c77dc28d
commit
516b80c0d0
5 changed files with 57 additions and 1 deletions
49
source/examples/common/variant.d
Normal file
49
source/examples/common/variant.d
Normal 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)));
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue