Если вы используете Lua 5.2 или выше, функция pairs
проверит метаметод __pairs
. Если он существует, он вызовет его для генерации данных перечисления для вызова pairs
. Таким образом, вы можете запретить кому-либо выполнять итерацию по глобальной таблице, присвоив этой таблице метаметод __pairs
, который либо возвращает «пустой» итератор (return function() return nil end, nil, nil
), либо просто завершается ошибкой с error
.
Однако, Функция Lua next
(которая является не частью библиотеки debug
) не заботится о метаметоде __pairs
. Он обеспечивает итерацию по всей таблице.
Таким образом, вам также нужно будет либо удалить next
из того, что скрипт может получить доступ, либо обернуть next
функцией, которая, если таблица имеет метаметод __pairs
, вернет nil
или error
out.
Pre- Lua 5.2, вам нужно будет написать свою собственную версию pairs
(и next
), которая эффективно выполняет эти действия (что есть, проверьте наличие метаметода __pairs
и действуйте соответствующим образом.