Lua 如何获取要调用的_元表函数? 我的目标

Lua 如何获取要调用的_元表函数? 我的目标,lua,metatable,meta-method,Lua,Metatable,Meta Method,获取getmetatable以返回分配给\uuu metatable字段的函数的返回值 代码: localx,m={},{uuu metatable=function()返回nil end}; 可设置元(x,m); io.write(“让我们获取元表:”,tostring(getmetatable(x)),“\n”); 但我得到的是实际函数,而不是返回值 那么,我如何让它被称为,这样我就可以得到零?所以它似乎没有元表?只需重写getmetatable,使其按您希望的方式工作;) do loca

获取
getmetatable
以返回分配给
\uuu metatable
字段的函数的返回值

代码:

localx,m={},{uuu metatable=function()返回nil end};
可设置元(x,m);
io.write(“让我们获取元表:”,tostring(getmetatable(x)),“\n”);
但我得到的是实际函数,而不是返回值


那么,我如何让它被称为,这样我就可以得到零?所以它似乎没有元表?

只需重写getmetatable,使其按您希望的方式工作;)

do local getmetatable=getmetatable
函数_G.getmetatable(选项卡)
本地元=getmetatable(选项卡)
如果类型(元)=“函数”,则
返回元(选项卡)
其他的
返回元
结束
结束
结束

或者,您可以将
\uuuu metatable
设置为false。这适用于编写的代码,如
如果getmetatable(foo)那么
,但如果getmetatable(foo)=false,则会中断为
这样的代码。可以说,第一个是你应该使用的,但是可能有人在做第二个


这也会向用户提示存在一个元表,他们不必为之忙碌。

您可以重新定义全局函数
getmetatable()
如果参数等于
x
则要更改逻辑,可以通过将
\uu metatable
设置为
false
来近似该行为,如果
setmetatable
也可用,则隐藏图元表的存在是徒劳的。