ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Lua实现面向对象

2021-10-08 22:33:45  阅读:172  来源: 互联网

标签: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()

最终打印结果如下:

image-20211008222558603

标签:function,end,name,面向对象,实现,self,People,Lua,new
来源: https://www.cnblogs.com/littleperilla/p/15383240.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有