lua元表理解

在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"],"and",t.foo,"is same")
print(t["fuck2"],"and",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()










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值