Как найти стол метатабельный - PullRequest
0 голосов
/ 20 декабря 2018

Есть ли тест (или волшебный способ), чтобы выяснить, есть ли у таблицы, с которой вы встречаетесь в скрипте, метатабельная где-то еще в этом скрипте или других необходимых модулях ??Это без очистки всего кода.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вам потребуется прочитать документацию или исходный код, если вы хотите получить информацию о содержимом метатаблицы.

Метатабиль таблицы можно заблокировать, определив __metatable, в этот момент getmetatable может почтиЛюбое значение, которое программист хотел вернуть, не может быть установлено на nil.

Luat-Users Metatable Events

__ metatable - Скрыть метатабельное,Когда вызывается «getmetatable (myTable)», если у метатаблицы для myTable есть ключ __metatable, то вместо этого фактического метаданного возвращается значение этого ключа.

Нет гарантийного метода, который можетсказать вам содержимое данной таблицы метатабельным.

отредактировано: для охвата nil как значения, невозможного при установке метатаблицы, как указано Николом Боласом

0 голосов
/ 20 декабря 2018

, если вы хотите знать наверняка:

if getmetatable(some_table) ~= nil then
  print "It has a metatable"
else
  print "It doesn't have a metatable"
end

Это обнаруживает метатабельный объект, даже если он был «скрыт» установкой __metatable = false.В случае, если вы хотите уважать это и считать «скрытый» метатабельный объект вообще не метатабируемым, вы также должны проверить false (или просто написать if getmetatable(some_table) then...)

(Спасибо, Егор Скриптунофф, за указание на то, чтовне!)

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