元表是一种用来定义对table或者userdata操作方式的表。有点c++中重载的味道。
对指定table设置元表(metatable):
mytable={}
mymetatable={}
setmetatable(table,metatable) --该函数返回第一个参数
以上代码可以直接写为mytable=setmetatable({},{}) ???
获取元表:
getmetatable(mytable)
metatable可以包括任何东西,metatable特有的键一般以__
开头,例如__index
和__newindex
,它们的值一般是函数或其他table。
__index元方法:用来对表访问
__newindex元方法:用来对表更新,使用rawset和rawget防止死循环
__call元方法:类似函数对象
__tostring元方法:用于修改表的输出行为
参考资料:
https://www.cnblogs.com/daxiaxiaohao/p/4651767.html
https://www.cnblogs.com/blueberryzzz/p/8947446.html