加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

lua元表理解

发布时间:2020-12-14 21:59:20 所属栏目:大数据 来源:网络整理
导读:在lua中任何变量都有一个元表(我相信每个字符串元表都是string相关,所以可以使用string:length()),元表中特殊的值有特殊的含义,比如__index,__call,__add等等。 函数setmetatable(a,meta) 就是将meta设置为这个名字叫做a的table的元表。所以设置元表语法
在lua中任何变量都有一个元表(我相信每个字符串元表都是string相关,所以可以使用string:length()),元表中特殊的值有特殊的含义,比如__index,__call,__add等等。 函数setmetatable(a,meta) 就是将meta设置为这个名字叫做a的table的元表。所以设置元表语法上有多种花样。 如: function class(base) return setmetatable({},{ __call ?= _instantiate,__index = base }) end 以上就是新建一个空表,但是他的元表的__index的值是base,由于setmetatable函数会返回第一个参数,所以该函数会返回 {} 这个空表。 另外元表中的__index可以是函数(或者是表),以下: fuck_table = {fuck1 = "oh yeah hardly"} t = setmetatable({},{ ? __index = function(t,key) ? ? if key == "foo" then ? ? ? return 99 ? ? else ? ? ? return fuck_table[key] ? ? end ? end }) print(t["fuck1"],"and",t.fuck1,"is same") print(t["foo"],t.foo,"is same") print(t["fuck2"],t.fuck2,"is same") 当然如果你高兴,你也可以事先创建一张表,而这个表里面刚好有__index,如下: teacher = {} teacher.mt = {} teacher.mt.__index = {yes = 1,no = 2,ok = 3,truth = 4} function teacher.new (ttt) ? ? ? ? return setmetatable(ttt,teacher.mt) end student = {no = 0,ok = 99} teacher.new(student) ? ? ?? print(student.yes) ? print(student.ok) 那么利用这个特性就可以完成继承了,如下: a = {} a.asd = "ddd" function a:new(b) ? ? ? ? b = b or {} ? ? ? ? return setmetatable(b,{ ? ? ? ? ? ? ? ? __index = self ? ? ? ? }) end function a.fuck() ? ? ? ? print("hehe,just a joke") end c = a:new() c.fuck() c.fuck = "jjjj" print(c.fuck) a.fuck()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读