Что такое метатаблица?
Часть раздела Logic & Flow путешествия по Lua на Coddy — урок 16 из 54.
Метатаблица — это просто обычная таблица Lua, но у неё есть специальное назначение. Когда вы прикрепляете метатаблицу к другой таблице (назовём её «основной» таблицей), вы можете изменить поведение этой основной таблицы при выполнении над ней определённых операций.
Подумайте об этом так: обычно, если вы попытаетесь сложить две таблицы вместе, используя оператор +, Lua не знает, что делать, и выдаст ошибку. Но с помощью метатаблицы вы можете определить, что означает сложение для ваших таблиц. Вы можете заставить её складывать соответствующие значения, объединять их содержимое или делать что-либо еще, что имеет смысл для вашей программы.
Метатаблицы работают путем определения специальных функций, называемых метаметодами. Эти метаметоды имеют специфические имена, начинающиеся с двух подчеркиваний, такие как __add для сложения или __index для поиска отсутствующих ключей. Когда Lua сталкивается с операцией над таблицей, у которой есть метатаблица, она проверяет, есть ли в метатаблице соответствующий метаметод, и использует его, чтобы определить, что должно произойти.
Эта концепция открывает такие возможности, как создание пользовательских типов данных с их собственным поведением, реализация объектно-ориентированных паттернов, защита таблиц от нежелательных изменений и многое другое. В следующих уроках вы узнаете, как прикреплять метатаблицы к таблицам и использовать метаметоды для настройки их поведения.
Шпаргалка
Метатаблица — это обычная таблица Lua, которую можно прикрепить к другой таблице, чтобы изменить её поведение для определённых операций.
Метатаблицы используют специальные функции, называемые метаметодами, имена которых начинаются с двух символов подчёркивания:
__add— определяет поведение при сложении__index— определяет поведение при поиске отсутствующих ключей
Когда выполняется операция над таблицей с метатаблицей, Lua проверяет наличие соответствующего метаметода и использует его для определения поведения.
Метатаблицы позволяют:
- Создавать пользовательские типы данных со специфическим поведением
- Реализовывать объектно-ориентированные паттерны
- Защищать таблицы от нежелательных изменений
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутая итерация таблиц
Итерация с помощью pairs()Итерация с помощью ipairs()pairs() против ipairs()Повторение — Лист персонажа2Дополнительные функции библиотеки table
table.concat()Создание таблиц и unpack()table.sort()Пользовательская сортировка с помощью функцийИтоги — Таблица рекордов