“:”与“.”的区别
定义:table:test()与 table.test(self)是等价的,点号(.)要达到冒号(:)的效果要加一个self参数到第一个参数;
调用:”:“object:test() 与object.test(object)等价,点号(.)要添加对象自身到第一个参数;
把点号(.)作为静态方法来看待,冒号(:)作为成员方法来看待。
lua元表(Metatables)
当需要对两个table进行操作时便需要用到Metatable
在创建一个新表时,默认不带Metatables。可以用setmetatable函数来设置或者改变一个表的Metatable
多个表可以共享一个metatable
lua闭包
由一个函数及该函数会访问到的非局部变量组成的(或upvalue),非局部变量指在嵌套函数或者匿名函数中即不是全局变量,但并未在局部作用范围内定义的。
lua模拟面向对象类
Lua中的表不仅在某些意义上是一种对象,表也有其状态(成员变量);也有与对象的值独立的本性,特别是有两个不同值的对象(table)代表不同的对象,一个对象在不同时间也有不同的值,但始终也是一个对象。