lua元表 扩展普通表的行为
setmetatable(tab,mematable),如果元表中存在__mematable,setmematable会失效,__mematable可以保护元表,禁止访问或修改元表中的成员。
getmetatable(tab),获取tab的元表。
__index:当搜索表的key不存在的时候调用,如果__index为一个函数的时候调用该函数,有两个参数table、key,函数有返回值时返回该值否则返回nil;如果__index为一个表的时候返回该表的key所代表的value
__newindex:当修改表不存在的索引时调用,就是添加新的键值对时调用。如果为函数时,由三个参数table、key、value,如果使用添加功能到表中使用方法rawset(table,key,value);如果为一个表的时候会将新的键值对添加到该表中。
__call:把表当作函数使用。__call = function(table,arg1,arg2) return "" end
__add等操作:执行表的各种运算操作,例如__add = function(tab1,tab2) return tab end
__tostring:输出表。__tostring = function (tab) return str end
面向对象编程
当通过:调用的时候,系统会自动传递当前的table给self,当通过.来调用的时候,self不会自动赋值,必须通过第一个参数来传递当前的table。
function class:new(o)
local t = o or {}
setmetatable(t,{__index = self})--调用一个属性的时候,如果t中不存在,会在__index所指定的table中寻找
return t
end
function class:new(o)
local t = o or {}
setmetatable(t,self)--调用一个属性的时候,如果t中不存在,会在__index所指定的table中寻找
self.__index = self
return t
end