我的目标
获取getmetatable以返回分配给__metatable字段的函数的返回值。
代码:
local x, m = {}, {__metatable = function() return nil end};
setmetatable(x, m);
io.write("Let's get the metatable:", tostring(getmetatable(x)), "\n");但我得到的是实际的函数而不是返回。
那我怎么叫它才能得到零呢?所以它似乎没有可移植性?
发布于 2019-09-19 13:51:08
只需重写getmetatable,使其按您希望的方式工作;)
do local getmetatable = getmetatable
function _G.getmetatable(tab)
local meta = getmetatable(tab)
if type(meta)=='function' then
return meta(tab)
else
return meta
end
end
end或者,您只需将__metatable设置为false。这对于像if getmetatable(foo) then这样编写的代码是有效的,但是会中断到像if getmetatable(foo) == false这样的代码。可以说,第一个是你应该使用的,但很可能有人在做第二个。
这也会向用户暗示,有一个元,这只是他们没有忙碌的混乱。
https://stackoverflow.com/questions/57996958
复制相似问题