Страница 1 из 1

Небольшое дополнение к исслеованию переменных

Добавлено: 08 сен 2020, 09:34
Sertik
Когда то, Чупакабра писал вот такую статью, которая до сих пор актуальна и помогает всем скриптописателям Рос:

https://habr.com/ru/post/270719/

Небольшое дополнение к ней:

1. Объявляем переменную

:global Var

2. Какой у неё тип, если присвоения не было ? Должен быть nil согласно руководству по Рос. Однако, как и написано в исследовании Чупакабры нет - будет nothing

:put [:typeof $Var]

3. Однако, если сделать вот так:

:global Var []

то, тип переменной будет как и положено nil, так как выполнение пустого действия всегда дает nil (Цитата по Чупакабре)

:put [:typeof $Var]

4. Присвоение значений, ну это известно, традиционно при объявлении или с помощью :set

:global Var "val"

или

:set $Var "val"

* или, оказывается можно более экзотично !:

/system script environment set [find name="Var"] value="val"


5. Пойдем дальше. Как удалить переменную ? Если она локальная удалять не нужно - сама пропадёт, когда скрипт "выйдет" из области видимости {}. Если глобальная - конечно, когда надобность в переменной пропадает - лучше очищать, чтобы не засоряли память, тем, более, что переменная может содержать функцию.
Удалить глобальную переменную можно несколькими способами:

:set Var (:nothing); - присвоением "ничего"

или "совсем реально ничего" вообще не указывая что присваиваем (согласно Вики)

:set Var

или

:global Var (:nothing); - "пересозданием со значением ничего"

Кстати, внутрь круглых скобок можно поместить просто ":" или пустую (необъявленную переменную), результат будет тот же.

или вот так, не совcем традиционно:

/system script environment remove [find name="Var"]

Обнулить (очиcтить значение), как уже ясно из вышеизложенного можно так:

:global Var []

А, извращенно и экзотично, вот так:

:global Clear (:nothing)
/system script env set [find name="Var"] value=$Clear


А так можно удалить все глобальные переменные из окружения:

/system script environment remove [find]

А вот так суперэкзотично можно узнать, есть в окружении глобальные переменные вообще или нет:

:if ([/system script env find .id!=0]) do={:put "Variables are present in environment"} else= {:put "Environment is empty"}

Фух ... Ну как то вот так ... Дополнения приветствуются.