lua-面向对象(定义与调用)
lua中的面向对象由table + function组成,分别表示属性,与方法
最简单的例子:
person = {name = 'SiNan' , age = '23'} --属性 person.walk = function () print(person.name..'在走路') end
这种情况的缺陷在于,方法里的person是写死的,以下例子可说明:
a = person --将person的引用赋值给a person = nil --将person置空 a.walk() --此处无法调用直接报错 原因在于print方法中,person写死 改用a.name才可正常运行
对以上缺陷进行改进,可以给方法传递一个参数,而这个参数代表自己本身
person.walk = function(self) print(self.name..'在走路') end a = person person = nil a.walk(a) --调用时传入自身即可
但是通过以上方式的话,调用也是比较麻烦,每次调用都需要传递自身的参数
lua里提供了:的方式对函数进行定义
function person:walk() print(self.name..'在走路') end a= person person:walk() --调用时直接用:调用则无需传参数,因为:的已经自动传递了 a:walk() --若还想通过.的方式访问,则需要传递参数(第一个参数) a.walk(a)
这里推荐使用:来定义以及调用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!