Я создал простую функцию для добавления элементов в массив, но столкнулся с некоторыми проблемами. Функция работает нормально, если имя массива, которое передаешь как первый аргумент, уже существует, переменная действительно является массивом, а значение не равно null. Я хотел бы вызывать эту функцию так, чтобы, если массива ещё нет, она создавала его и добавляла второй параметр. Проблема в том, что если массива нет, его значение равно nil, и получается, что первый аргумент как будто не передавали, из-за чего выходят странные результаты.
Вот сама функция.
Usage: [$arrayPush]
Вводишь имя массива и значение, которое нужно добавить в конец массива:
:global arrayPush do={
:if ($1=“”) do={ :error “Вы не указали имя массива.”; }
:if ($2=“”) do={ :error “Вы не указали значение для добавления.”; }
:local string;
:if ([:typeof $1]=“array”) do={
:foreach item in=$1 do={
:set string ($string . “,” . $item);
}
:set string ($string . “,” . $2);
:set string [:toarray $string];
:return $string;
} else={
:error “Первый аргумент не является массивом.”;
}
}
Вот пример, что я имею в виду:
:global myVar;
:set myVar [:toarray $myVar];
:set myVar [$arrayPush $myVar “some value”];
Поскольку $myVar равен nil, функция toarray по сути ничего не делает, и следующая строка даёт неожиданные результаты. Точно объяснить сложно, но надеюсь, суть понятна. Есть идеи, как это обойти? Сейчас я могу только проверить, существует ли массив перед вызовом функции, и если нет — создать переменную как строку, а потом конвертировать в массив, но это слишком много лишних шагов.
Вот сама функция.
Usage: [$arrayPush]
Вводишь имя массива и значение, которое нужно добавить в конец массива:
:global arrayPush do={
:if ($1=“”) do={ :error “Вы не указали имя массива.”; }
:if ($2=“”) do={ :error “Вы не указали значение для добавления.”; }
:local string;
:if ([:typeof $1]=“array”) do={
:foreach item in=$1 do={
:set string ($string . “,” . $item);
}
:set string ($string . “,” . $2);
:set string [:toarray $string];
:return $string;
} else={
:error “Первый аргумент не является массивом.”;
}
}
Вот пример, что я имею в виду:
:global myVar;
:set myVar [:toarray $myVar];
:set myVar [$arrayPush $myVar “some value”];
Поскольку $myVar равен nil, функция toarray по сути ничего не делает, и следующая строка даёт неожиданные результаты. Точно объяснить сложно, но надеюсь, суть понятна. Есть идеи, как это обойти? Сейчас я могу только проверить, существует ли массив перед вызовом функции, и если нет — создать переменную как строку, а потом конвертировать в массив, но это слишком много лишних шагов.

. #4 вместе с #7 — они содержат дополнительную информацию и викторину.