lua元表与面向对象

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值