For the complete documentation index, see llms.txt. This page is also available as Markdown.

Расширенный справочник языка

CSL даёт вам несколько «массивоподобных» инструментов, которые покрывают большинство игровых задач: фиксированные массивы, срезы и динамические массивы. Эта страница — практическое руководство по их использованию без подводных камней.

Краткий глоссарий

  • Фиксированный массив: [N]T — размер известен на этапе компиляции.

  • Срез / управляемый массив: []T — представление данных массива (часто используется для параметров).

  • Динамический массив: [..]T — изменяемый по размеру список с count и capacity.

fixed: [4]int = {1, 2, 3, 4};
view: []int = fixed; // представление среза

list: [..]int;
list.append(10);
list.append(20);

Методы динамических массивов используют обычные вызовы через точку (например, list.append(x)). Поля тоже используют доступ через точку (например, list.count).

Динамические массивы ([..]T)

Динамические массивы — это тип «списка по умолчанию» для игрового кода.

Создание и добавление

players_seen: [..]string;
players_seen.append(player.get_user_id());

Резервирование ёмкости (производительность)

Если вы знаете, что добавите много элементов, сначала зарезервируйте место, чтобы избежать повторных перераспределений.

Удаление элементов

Обычно выбирают между быстрым удалением (порядок не важен) и упорядоченным удалением (с сохранением порядка).

Можно также удалять по индексу:

Очистка

Передача массивов в процедуры

Многие API принимают []T (срез/представление). Динамические массивы можно передавать туда, где []T ожидается.

Шаблоны итерации

Итерация по элементам

Итерация по индексам

Используйте ..< когда нужен обычный цикл «от 0 до count, не включая count»:

Обратные циклы используют #reverse:

Хеш-таблицы

Используйте Hashtable(Key_Type, Value_Type) когда нужен быстрый поиск по ключу. Поддерживает целочисленные и строковые ключи, а также обычные методы поиска, вставки, перезаписи, удаления и итерации.

Используйте add когда дубликаты ключей должны вызывать assert. Используйте add_or_overwrite когда ожидается обновление существующего ключа. try_add возвращает true если ключ уже существовал, и оставляет старое значение без изменений.

Замыкания, колбэки и userdata (важно)

CSL не Не поддерживает замыкания. Встроенные proc() { ... } определения не могут захватывать переменные из окружающей области видимости.

Когда вам нужны колбэки (обработчики UI, хуки смерти и т. д.), связывайте колбэк с полем userdata: Object поля.

Справочник API

Каждый проект включает api_references/ папку, содержащую текущий основной API. Откройте соответствующий .csl_engine файл, чтобы посмотреть тип или процедуру.

Последнее обновление