Здесь описаны основные изменения в QSP 5.9.0:
Основные изменения в версии QSP 5.9.0:
Кортежи
Добавлены полноценные кортежи и специальный префикс типа для кортежей "%", вложенные кортежи тоже поддерживаются.
Кортеж - специальное значение, состоящее из нескольких других значений (допустимо смешивание значений разных типов в одном кортеже).
Примеры кортежей:
%q = [4, 6, 7]
%q = ['sdfsd', 6]
%q = [34]
%q = [] & ! пустой кортеж
%q = (65,'ddd')
%q = () & ! пустой кортеж
%q = [56,[32,'sdsd'],3]
Рекомендуется использовать скобки [ ] для указания кортежей, однако ( ) тоже поддерживаются.
В присваиваниях скобки можно не указывать, например:
%q=65,'ddd'
local %q=65,'ddd',33
Распаковка кортежа, в этом случае указанным переменным последовательно присваиваются значения элементов кортежа:
%q = [56,[32,'sdsd'],3]
a, %b, c = %q
a, %b, c = [56,[32,'sdsd'],3]
a, %b, c = 56,[32,'sdsd'],3
local a, b = b, a
local a, n = 123, 56
Кортеж считается одним значением - их можно использовать для индексации в массивах, а также в значениях элементов массивов.
Кортежи - новый полноценный тип данных (пример: %A) наравне со строками (пример: $A) и числами (пример: A).
Примеры индексации в массивах:
$a[56,'sdsd'] = 'test'
$v = $a[56,'sdsd']
$q = $p[%d]
Для кортежей работают операции LEN, &, STR, VAL, ISNUM, а также несколько других:
LEN возвращает длину кортежа: LEN([5,7,'a']) = 3
& объединяет кортежи или значение с кортежем: (['sss',5,7] & [4,6]) = ['sss',5,7,4,6] или (['sss',5,7] & 66) = ['sss',5,7,66]
STR преобразует кортеж в строку: STR([5,7,'a']) = "[5,7,'a']"
VAL пытается преобразовать кортеж в число, возвращает 0 при невозможности: VAL(['42']) = 42
ISNUM проверяет можно ли преобразовать кортеж в число: ISNUM(['42']) = 1
Поддерживаются операции "+","-","*","/", где результатом будет новый кортеж, в котором указанная операция выполняется для каждого элемента исходного кортежа.
Пример:
%a = [4,5,6]
%b = %a + 5
%c = %a - 2
%d = %a * 7
%e = 60 / %a
%a -= 4
%a *= 3
%a = ['value 1', 'value 2']
%b = %a + ' extra'
%c = 'extra ' + %a
Оператор SCANSTR (разбор строки на токены)
SCANSTR [$имя_массива_с_результатами], [$текст_для_разбора], [$регулярное_выражение_подстроки], [#номер_группы_регулярного_выражения]
Последний параметр опционален. Если не указан или равен 0, то в массив будут добавляться строки, соответствующие всему регулярному выражению.
Пример:
$text = '123|dfdf|34|90'
SCANSTR '$res1', $text, '[^|]+'
SCANSTR '$res2', $text, '\w+'
Оператор SORTARR (встроенная сортировка массивов)
SORTARR [$имя_массива], [#порядок]
Параметр [#порядок] опционален. Если не указан или равен 0, то сортирует массив по возрастанию. Если равен 1, то сортирует массив по убыванию.
Может сортировать массивы любых типов (числа, строки, кортежи), но не допускается смешивать значения разных типов в одном массиве.
Для указания типа сортируемых значений нужно указать префикс типа как часть имени массива ($, %).
Пример:
$a[] = 'nn'
$a[] = 'zz'
$a[] = 'aa'
SORTARR '$a'
Функция CUROBJS (получение кода для добавления текущего списка предметов, аналогично CURACTS)
Пример использования:
$old_objs = $CUROBJS
KILLOBJ
DYNAMIC $old_objs
Возможность писать комментарии после многострочных операторов
Примеры:
if 0: ! some comments
'example 1'
else if 123: ! some comments
'example 2'
elseif 33: ! some comments
'example 3'
else: ! some comments
'example 4'
else ! some comments
'example 5'
end
act 'take something': ! some comments
'example 6'
end
loop while 0: ! useless loop
'example 7'
end
Улучшение сообщений об ошибках (показана строка кода с ошибкой, а не только номер строки)
Долгожданное изменение, упрощающее поиск и исправление ошибок!
Исправление ошибок, появившихся в версии 5.8 |