Dans la version 5.1, il y avait certaines incohérences entre la fonctionnalité métatable d'une donnée utilisateur et d'un tableau (la fonction #
L'opérateur n'a pas appelé __len
en 5.1 lorsqu'il est utilisé sur un tableau). La version 5.2 a supprimé ces incohérences, de sorte qu'il n'y a pas de différence entre la métatable d'une table et celle d'une userdata.
En tant que tel, il n'est pas nécessaire. Il est très facile d'écrire un équivalent quasi exact de newproxy
La seule différence est le type de l'objet renvoyé :
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
Bien sûr, puisque vous écrivez une nouvelle fonction de toute façon, vous pouvez aussi lui donner une API améliorée. Par exemple, un moyen de créer des proxies avec une métatable donnée, plutôt que de lui donner une table/donnée utilisateur qui a une métatable.