标签:function end name 面向对象 实现 self People Lua new
Lua实现面向对象
Lua本身没有面向对象,但是可以通过function和表来模拟面向对象的过程;
表table
Lua中没有类的概念,可以用table模拟类的用法;
table存放的键值对,可当做class中的字段和方法,都可以存进表中;
首先创建公共方法:复制表中所有的键值对;
function clone(tab)
local ins = {}
for key,var in pairs(tab)do
ins[key] = var
end
return ins
end
function copy(dist,tab)
for k,v in pairs(tab)do
dist[k] = v
end
end
实例化对象
可以模拟类的构造函数,写一个new方法;
People是一个类,p为People的对象;
People = {name = ""}
function People.new(name)
local self = clone(People)
self.name = name
return self
end
People.walk = function(self)
print(self.name.."is walking slowly!")
end
--创建对象
local p = People.new("little Perilla")
p:walk()
继承
创建一个新的表,重写new构造方法,同时拷贝父类中所有的键值对;
--继承
Man = {}
Man.new = function(name)
local self = People.new(name)
copy(self,Man)
return self
end
重写方法
直接暴力重写,同名即可;
--重写方法
Man.walk = function(self)
print(self.name.." is walking!")
end
--创建对象
local m = Man.new("little Perilla")
m:walk()
最终打印结果如下:
标签:function,end,name,面向对象,实现,self,People,Lua,new 来源: https://www.cnblogs.com/littleperilla/p/15383240.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。