Итоги — Таблица только для чтения
Часть раздела Logic & Flow путешествия по Lua на Coddy — урок 23 из 54.
Задание
ЛегкоНапишите функцию makeReadOnly, которая принимает original и возвращает версию таблицы, доступную только для чтения.
Создайте прокси-таблицу с метатаблицей, которая позволяет чтение из исходной таблицы, но предотвращает любые изменения.
Логика:
- Создайте пустую прокси-таблицу
- Создайте метатаблицу с
__index, указывающим на исходную таблицу (чтобы разрешить чтение) - Добавьте
__newindexв метатаблицу, который ничего не делает (чтобы заблокировать изменения) - Прикрепите метатаблицу к прокси-таблице с помощью
setmetatable() - Верните прокси-таблицу
Параметры:
original(table): Таблица, которую нужно защитить от изменений
Возвращает: Прокси-таблицу, обеспечивающую доступ только для чтения к исходной таблице (table)
Попробуйте сами
function makeReadOnly(original)
-- Напишите код здесь
end
Все уроки раздела Logic & Flow
1Продвинутая итерация таблиц
Итерация с помощью pairs()Итерация с помощью ipairs()pairs() против ipairs()Повторение — Лист персонажа4Введение в метатаблицы
Что такое метатаблица?setmetatable и getmetatableМетаметод __indexМетаметод __newindexМетаметод __tostringАрифметические метаметоды. Часть 1Арифметические метаметоды. Часть 2Итоги — Таблица только для чтения2Дополнительные функции библиотеки table
table.concat()Создание таблиц и unpack()table.sort()Пользовательская сортировка с помощью функцийИтоги — Таблица рекордов