Lua中关于Metatables和Metamethods的原理和用法,你能详细解释一下吗?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2327个文字,预计阅读时间需要10分钟。
Metatables 允许我们修改 table 的行为,任何表都可以是其自身的 metatable,一组相关的表可以共享同一个 metatable(描述它们共有的行为)。一个表也可以拥有自身的 metatable(描述其独有的行为)。
Metatables允许我们改变table的行为,任何一个表都可以是其他一个表的metatable,一组相关的表可以共享一个metatable(描述他们共同的行为)。一个表也可以是自身的metatable(描述其私有行为)
1.getmetatable(t):获取t的metatable,setmetatable(t,tmetatable):设置t的metatable为tmetatable
t = {}; print(getmetatable(t)); t1 = {}; setmetatable(t,t1); if getmetatable(t) == t1 then print("t's metatable is t1"); end
2.对于每一个算术运算符,metatable都有对应的域名与其对应,如__add(加),__mul(乘),__sub(减),__div(除),__unm(负),__pow(幂),我们也可以定义concat定义连接行为。
本文共计2327个文字,预计阅读时间需要10分钟。
Metatables 允许我们修改 table 的行为,任何表都可以是其自身的 metatable,一组相关的表可以共享同一个 metatable(描述它们共有的行为)。一个表也可以拥有自身的 metatable(描述其独有的行为)。
Metatables允许我们改变table的行为,任何一个表都可以是其他一个表的metatable,一组相关的表可以共享一个metatable(描述他们共同的行为)。一个表也可以是自身的metatable(描述其私有行为)
1.getmetatable(t):获取t的metatable,setmetatable(t,tmetatable):设置t的metatable为tmetatable
t = {}; print(getmetatable(t)); t1 = {}; setmetatable(t,t1); if getmetatable(t) == t1 then print("t's metatable is t1"); end
2.对于每一个算术运算符,metatable都有对应的域名与其对应,如__add(加),__mul(乘),__sub(减),__div(除),__unm(负),__pow(幂),我们也可以定义concat定义连接行为。

