16.表的继承
除了操作符外,读取与新建表不存在的数据也可以进行重载,其关键字分别为__index与__newindex,同样也是通过元表(setmetatable)来实现的
例子:
这里我定义了一个单位,他的数据包括hp和mp,然后我定义了一个英雄,既然是英雄那么他就要有三维,但同时他也要有单位的数据
在这里,我通过元表mt将__index赋值为了unit,这样当你获取hero.hp时将会返回100.流程如下:
试图获取hero.hp,但是hero里没有hp的定义,打开元表mt,成功找到了__index,他的值是另一张表unit,于是便到unit中寻找hp,成功找到了100,将其返回
在这个例子中,我将__index赋值为了一张表.不过他也可以赋值为函数,进行逻辑操作
例子:
此时print(t[10]) 的结果是89
__newindex的例子:
如果你试图 unit.str = 15,那么就会赋值失败并显示错误
同样__newindex 也接受table做参数,例如前面的例子中我可以 hero.hp = 200,通过__newindex我可以实现让hero继承的unit来进行unit.hp = 200
嗯...想不到还有什么比较简单的东西能讲了...
https://github.com/actboy168/jass2lua/blob/master/lua-engine.md