- Вывод текста
- Программирование
- Оформление
- Расширенные возможности
- Нюансы написания игр под разные плееры
-
- x AeroQSP
- Утилиты и средства разработки
Это старая версия документа.
QSP позволяет упаковывать несколько значений в одну переменную, а затем извлекать их оттуда. Упакованные данные называются "строка значений", или "кортеж".
Чтобы создать кортеж, нужно присвоить перемнной, имя которой начинается с символа $
группу значений, перечисленных в круглых скобках через запятую. Пример:
! создаём кортеж $personage = ("Петя", 27, 182, 92, "боксёр")
Когда мы создаём кортеж, это называется упаковкой данных. Обратный процесс называется распаковкой:
! распаковываем данные из кортежа $name, age, height, weight, $sports = $personage
Кортежи можно помещать и в отдельные ячейки массивов:
$personage[0] = ("Петя", 27, 182, 92, "боксёр") $personage[1] = ("Вася", 32, 162, 57, "жокей") $personage[2] = ("Маша", 19, 158, 42, "фигуристка") $personage[3] = ("Даша", 24, 202, 81, "баскетболистка")
Мы можем индексировать ячейки массивов с помощью кортежей, точно так же, как и с помощью строк. При этом, если кортеж прописывается прямо в квадратных скобках, круглые скобки можно и нужно опускать для лучшей читаемости кода. Таким образом можно создавать многомерные массивы:
! многомерный массив: $map[1,2] = 'space' $map[1,3] = 'space' $map[5,7] = 'tree' $map[0,-1] = 'hero' *pl $map[x,y] ! можно, но не рекомендуется, ! писать так: $map[(1,2)] = 'space' $map[(1,3)] = 'space' $map[(5,7)] = 'tree' $map[(0,-1)] = 'hero' *pl $map[(x,y)]
Почитать про многомерные массивы можно в соответствующем подразделе раздела "Массивы".
Кортежи из одного значения создать невозможно, так как с точки зрения синтаксиса, выражение в скобках — это просто математическое выражение. Как кортеж оно распознаётся только при наличии в этих скобках запятых между значениями. Например:
$tuple=(-1)
В данном случае в переменную $tuple
будет записана строка "-1"
ввиду автоматического преобразования типа.
Если попытаться индексировать массив через такие "кортежи", могут возникнуть трудности, потому что для движка это обычное математическое выражение, значение которого он вычисляет.
$map[(-1)]
будет эквивалентно $map[-1]
, а значения ячеек при указании на отрицательные индексы игнорируются плеером.
Можно транслировать значения через переменные, как бы соблюдая парадигму записи кортежей.
$tuple=(-1) $map[$tuple]
Однако это будет эквивалентно использованию обычных строковых индексов.
$tuple=(-1) *pl $tuple $map[(-1)]='string' *pl $map[(-1)] $map[$tuple]='out' *pl $map[$tuple]
Поскольку кортежи позволяют упаковывать в переменную несколько значений, появилась возможность возвращать из пользовательской функции сразу несколько значений, используя распаковку:
!foo $result = (12, 45) !start x, y = @foo()
$ht = (12, 34) $rm = (13, 19) $tuple = ($ht, $rm) *pl $tuple
$pos_in_space = (12, -3, 9) x, y, z = $pos_in_space y = -13 $pos_in_space = (x, y, z)
**$*
*, так как в эту переменную будет упаковываться оставшаяся часть кортежа:$personage = ("Петя", 27, 182, 92, "боксёр") $name, $tale = $personage *pl $name $name, age, height, $tale = $personage *pl "Имя: <<$name>>, возраст: <<age>>, рост: <<height>>." weight, $sports = $tale *pl $sports
$tuple_1 = (13, 19) $tuple_2 = ("13", "19") if $tuple_1 = $tuple_2: "кортежи одинаковые" else: "кортежи разные" end
Ликбез по кортежам в видеоролике на ютуб: "Алгоритмы поиска путей на QSP".