Lua编程示例(二):面向对象、metatable对表进行扩展
技术  /  管理员 发布于 5年前   401
counter = { count = 0}function counter.get(self) return self.countendfunction counter:inc() self.count=self.count+1endprint(counter.get(counter))counter.inc(counter)print(counter.get(counter))counter2={ count=4, get = counter.get, inc = counter.inc,}print(counter2:get())counter.inc(counter2)print(counter2.get(counter2))print()tb1 ={ "alpha","beta","gamma"}mt={}setmetatable(tb1,mt)print(getmetatable(tb1) == mt)print()function mt.__add(a,b) local result = setmetatable({},mt) for i=1,#a do table.insert(result,a[i]) end for i=1,#b do table.insert(result,b[i]) end return resultendtb2={"aaa","bbb","ccc"}res=tb1+tb2for i,v in ipairs(res) do print(v)endprint()function mt.__unm(a) local result = setmetatable({},mt) for i=#a , 1 ,-1 do table.insert(result,a[i]) end return resultendres=-tb1+tb2for i,v in ipairs(res) do print(v)endprint()function mt.__tostring(a) local result = "{" for i,v in ipairs(a) do result = result.." "..v end result = result.." } " return resultendprint(tb1)function mt.__index(tb1,key) print("there is no "..key.." in the table") return nilendprint(tb1["fsy"])function mt.__newindex(a,key,v) if( key == "haha") then error(" Stop laugh!",2) else rawset(a,key,v) endendtb1.haha="heihei"
运行结果:
0145truealphabetagammaaaabbbcccgammabetaalphaaaabbbccc{ alpha beta gamma } there is no fsy in the tablenillua: my_test.lua:166: Stop laugh!stack traceback: [C]: in function 'error' my_test.lua:160: in function <my_test.lua:158> my_test.lua:166: in main chunk [C]: ?
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号