Lua - Как мне разбить мета таблицы или сделать их неиспользуемыми - PullRequest
0 голосов
/ 26 августа 2018

Так что в моей игре большинство эксплуататоров используют метатаблицы, чтобы остановить запреты, и я хотел бы их снять, я их не использую, и это только навредит эксплуататорам.Даже если это сломает другие части Луа, я могу и исправлю это, но это нужно прекратить, и это мой лучший выбор.

1 Ответ

0 голосов
/ 26 августа 2018

С Программирование на Lua, 4-е издание , глава 20:

Функции setmetatable и getmetatable также используют мета-поле, в данном случае для защиты метатаблиц. Предположим, что мы хотим защитить наши наборы, чтобы пользователи не могли ни видеть, ни изменять свои метатаблицы. Если мы установим поле __metatable в метатаблице, getmetatable вернет значение этого поля, тогда как setmetatable повыситошибка:

mt.__metatable = "not your business"

s1 = Set.new{}
print(getmetatable(s1))     --> not your business
setmetatable(s1, {})
    stdin:1: cannot change protected metatable

Итак, ваш ответ?Установите поле __metatable, чтобы запретить доступ к метатаблице таблицы.Сделайте это для всех таблиц, которые вам нужно защищать.

...