lua元表理解

lua元表理解,第1张

概述在lua中任何变量都有一个元表(我相信每个字符串元表都是string相关,所以可以使用string:length()),元表中特殊的值有特殊的含义,比如__index,__call,__add等等。 函数setmetatable(a,meta) 就是将meta设置为这个名字叫做a的table的元表。所以设置元表语法上有多种花样。 如: function class(base) return set @H_301_2@ 在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() @H_301_2@ 总结

以上是内存溢出为你收集整理的lua元表理解全部内容,希望文章能够帮你解决lua元表理解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1246393.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存