代码如下:
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菜鸟教程的链接。