В 5.1 были некоторые несоответствия между метатабельной функциональностью пользовательских данных и таблицы (оператор #
не вызывал __len
в 5.1 при использовании в таблице). 5.2 устранил эти несоответствия, поэтому нет разницы между метатабельной таблицей и метаданной пользовательской информации.
Таким образом, в этом нет необходимости. Очень просто написать почти точный эквивалент newproxy
, с той лишь разницей, что тип возвращаемого объекта:
function newproxy(new_meta)
local proxy = {}
if(new_meta == true) then
local mt = {}
setmetatable(proxy, mt)
elseif(new_meta == false)
else
--new_meta must have a metatable.
local mt = getmetatable(new_meta)
setmetatable(proxy, mt)
end
return proxy
end
Конечно, поскольку вы все равно пишете новую функцию, Вы могли бы также дать ему улучшенный API. Например, способ создания прокси с заданным метатабилем, а не предоставление ему таблицы / пользовательских данных с метатабилем.