Добавлен модуль использования Variant
This commit is contained in:
parent
16c77dc28d
commit
516b80c0d0
5 changed files with 57 additions and 1 deletions
|
@ -12,6 +12,7 @@ int main(string[] args)
|
|||
"Проверяет наличие исполняемого файла в директориях,указанных в переменной окружения PATH"))
|
||||
.add(new Command("splittext",
|
||||
"Форматирует массив строк, разбивая их на строки указанной длины"))
|
||||
.add(new Command("variant", "Динамическая работа с разными типами данных в одной переменной"))
|
||||
)
|
||||
.add(new Command("ncurses", "Использование библиотеки ncurses")
|
||||
.add(new Command("menu", "Интерактивное консольное меню"))
|
||||
|
@ -27,6 +28,7 @@ int main(string[] args)
|
|||
|
||||
argumets
|
||||
.on("common", (common) { common
|
||||
.on("variant", (variant) { fVariant(); })
|
||||
.on("splittext", (splittext) { formatLines(); })
|
||||
.on("isexists", (isexists) { isExists(); });
|
||||
})
|
||||
|
|
|
@ -7,3 +7,7 @@
|
|||
## isexists
|
||||
|
||||
Функция `isExecutableExists` проверяет наличие исполняемого файла `appName` в директориях, указанных в переменной окружения `PATH`. Разбивает `PATH` на директории, формирует полный путь к файлу и проверяет его существование и тип (файл). Возвращает `true`, если файл найден, иначе `false`. Использует модули `std.process`, `std.file`, `std.path`, `std.array`.
|
||||
|
||||
## variant
|
||||
|
||||
Функция `fVariant` демонстрирует использование типа `Variant` из модуля `std.variant` для работы с данными разных типов. Вспомогательная функция `getValue` возвращает `Variant`, содержащий `int` (42) при `arg=1`, `string` ("Hello, D!") при `arg=2` или `DList!int` ([1, 2, 3]) в остальных случаях. `fVariant` выводит тип и значение для каждого случая, преобразуя `DList!int` в массив для отображения. Использует модули `std.variant`, `std.container`, `std.stdio`, `std.array`.
|
||||
|
|
|
@ -2,3 +2,4 @@ module examples.common;
|
|||
|
||||
public import examples.common.isexists;
|
||||
public import examples.common.splittext;
|
||||
public import examples.common.variant;
|
||||
|
|
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)));
|
||||
}
|
|
@ -1,3 +1,3 @@
|
|||
module examples.version_;
|
||||
|
||||
enum examplesVersion = "0.5.0";
|
||||
enum examplesVersion = "0.6.0";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue