Переменные — это удобный способ сохранять и использовать данные в сценариях ботов. Они работают как именованные «контейнеры», которые бот создает автоматически, когда встречает их впервые. Вначале переменная всегда пустая и имеет значение nil
.
Все переменные делятся на три типа, в зависимости от их области видимости:
Переменные потока (локальные переменные). Эти переменные работают только в рамках текущего потока — последовательности действий, выполняемых ботом. Они отлично подходят для временного хранения данных, например, промежуточных вычислений. Имена таких переменных начинаются с символа $
.
Пример:
$p = 2 * 3.14 * $radius // Переменная $radius доступна только в текущем потоке
Переменные модуля. Доступны во всех потоках в рамках одного модуля. Это удобно, если нужно обмениваться данными между потоками одного сценария. Имена таких переменных начинаются с символа #
.
Пример:
#count = queue.size() // Переменная #count доступна во всех потоках текущего модуля
Глобальные переменные (переменные окружения). Глобальные переменные видны везде: во всех модулях и потоках. Они содержат информацию о текущем состоянии бота и контексте его работы. Имена таких переменных начинаются с символа @
. Они доступны только для чтения.
Пример:
$isChat = @communicationType == "TEXT" // Глобальная переменная @communicationType доступна везде
Имена переменных могут содержать:
Нельзя использовать пробелы и специальные символы. Если нужно задать переменную с необычным именем, используйте круглые скобки.
Пример:
$('日本') = 123 // Создание переменной с именем на японском
$x = $('日本') // $x теперь равна 123 // Доступ к переменной с нестандартным именем
Иногда нужно создавать имена переменных прямо во время выполнения сценария. Это называется динамическим вычислением имен. Такой подход особенно полезен для сложных логик.
Пример:
// Создаем переменные с названиями x1, x2, x3
$x1 = "red"
$x2 = "blue"
$x3 = "green"
// Случайное число от 1 до 3
$n = math.rand(1, 3)
// Формируем имя переменной и получаем значение
$color = $("x" :: $n) // Например, $color может стать "red", "blue" или "green"
Благодаря динамическим вычислениям переменные могут использовать значения других переменных, что позволяет создавать сложные логические цепочки.
Пример:
$x = "y" // $x содержит название переменной #y
#y = "communicationType" // #y содержит название глобальной переменной communicationType
$communicationType = @#$x // Итоговое значение: @communicationType
$
) — подходят для временных операций внутри одного потока.#
) — используются для обмена данными между потоками в одном модуле.@
) — применяются для получения общей информации о работе бота.