Lua metatable & metamethod

时间:2022-06-01 19:40:50

Lua metatable & metamethod

  Lua中的每个值都有一套预定义的操作集合,比如数字是可以相加的,字符串是可以连接的,但是对于两个table类型,则不能直接进行“+”操作。这需要我们进行一些操作。在Lua中有一个元表,也就是上面说的metatable,我们可以通过元表来修改一个值得行为,使其在面对一个非预定义的操作时执行一个指定的操作。比如,现在有两个table类型的变量a和b,我们可以通过metatable定义如何计算表达式a+b,具体的在Lua中是按照以下步骤进行的:

  1. 先判断a和b两者之一是否有元表;
  2. 检查该元表中是否有一个叫__add的字段;
  3. 如果找到了该字段,就调用该字段对应的值,这个值对应的是一个metamethod;
  4. 调用__add对应的metamethod计算a和b的值。

  Lua在创建新的table时不会创建元表

  Lua metatable & metamethod

  可以使用setmetatable去设置一个table或userdata类型变量的元表

  Lua metatable & metamethod

  在table中,我可以重新定义的元方法有以下几个:

  Lua metatable & metamethod

参考:http://www.jellythink.com/archives/511