Доступ к типу метатаблиц Lua - PullRequest
       15

Доступ к типу метатаблиц Lua

2 голосов
/ 23 сентября 2010

Очевидно, что getmetatable может получить доступ к метатаборам нескольких типов:

getmetatable("")
getmetatable({})
getmetatable(newproxy(true))

Однако кажется, что вы не можете получить метатаблицу других типов (кроме функций).Кажется, нет никакого способа получить доступ к метатабельным числам, логическим или нулевым значениям.

Мне также было интересно, сможет ли кто-нибудь получить доступ к метатаблице всего типа таблицы.Чтобы иметь возможность сделать что-то вроде этого:

({}) + ({})

Ответы [ 2 ]

5 голосов
/ 24 сентября 2010

строки, числа, ноль, функции и lightuserdata имеют одну метатаблицу для всего типа. таблицы и полные пользовательские данные имеют метатаблицу для каждого экземпляра.

из документов:

Таблицы и полные пользовательские данные имеют отдельные метатаблицы (хотя несколько таблиц и userdata могут поделиться их метатаблицы). Ценности всего прочего типы разделяют один единственный метатабельный на тип; то есть есть один единственный метатабельный для всех номеров, один для всех струны и т. д. струны и т. д.

нет «метатабельного табличного типа», как нет «метатабильного для этой строки»

тип string имеет таблицу 'string' как метатабильную по умолчанию; но вы можете установить метатабель для других типов, используя debug.setmetatable() function.strings и т. д.

0 голосов
/ 27 сентября 2010

Numbers, Booleans и nil по умолчанию не имеют метатаблицы (следовательно, getmetatable возвращает nil). Вы можете дать им один с debug.setmetatable.

Нет общей таблицы метатабельных. (и то же самое для пользовательских данных (по крайней мере, для большого сорта))

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