Lua实现继承

代码如下:

parent = {}
parent.name = "水果"

function parent:myName()
print("我是"..self.name)
end

function parent:new()
t={}
setmetatable(t,{__index = self })
return t
end

child1=parent:new()
child1.name = "香蕉"
child1:myName()

child2=parent:new()
child2.name = "苹果"
child2:myName()

执行结果为:

我是香蕉
我是苹果

解释:
Lua本身并不是面向对象的语言,但它可以用table模拟出面向对象的操作(table里值的存取类似键值对,即索引和值)。
它可以直接为表添加元素,不需要经过Add这样的操作,简单粗暴,像上面代码中的

parent.name = "水果"

如果表里面有这个元素就把此元素的值给替换了,如果没有,就自动创建一个新的。但如果索引没有对应的值则也是会报空的。另外,表与表之间可以通过元表(setmetatable)相互联系,使用元表要有元方法“__index”就是最常用的元方法,即你访问表t中没有的元素时,会再去self所代表的表中寻找,而不是直接停止,就是因为它有这个特性,所以才能模仿实现继承。下面的一行代码就表示把self对应的表设置为t的元表。

setmetatable(t,{__index = self })

也就是说,Lua就是通过表的特性模拟出的继承。
这里有Lua菜鸟教程的链接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值