LuaForUnity7.1:Lua“类与对象”
前文:https://blog.csdn.net/Jaihk662/article/details/95452907(Lua表与元表)
一、Lua的“面对对象”
可以看到题目和标题的“类与对象”都是加了引号的,原因很简单:
Lua语言本质上是非常简单的,没有强大的类库,所以说使用Lua独立开发一款程序是不可能的,大部分情况都是是嵌入到其他语言编写的程序中进行辅助工作,这句话的意思就是:其实Lua根本就没有类与对象的概念
而Lua所谓的“面对对象”其实是根据table模拟出来的一个环境,所以和一般语言的类与对象还是有差,那么究竟是怎么模拟的呢?可以参考下面这份最简单的代码:
print("--------------------------------------------------------------------")
t1 = {1,2,3}
t2 = {1,2,3}
t3 = t1
print(t2 == t1) --false
print(t3 == t1) --true
t3[3] = 5
print(t1[3]) --5,可以发现table是引用型的print("--------------------------------------------------------------------")
Person = {name, age} --定义一个Person类,其中name和age都为“字段”,注意这里的name没有加双引号,所以当然不是字符串function Person:New(name) --模拟构造函数local obj = {} --初始化一个新表setmetatable(obj, Person)Person.__index = Person --设置元表并指定索引obj.name = namereturn obj
endfunction Person:Show() --模拟一个方法print(string.format("名字:%s, 年龄:%d", self.name, self.age))--self表示当前"类"的对象,和C#中的this类似
endyou = Person:New("Huangkai")
you.age = 250
me = Person:New("Jia")
me.age = 10
you:Show()
me:Show()
print(Person)print("--------------------------------------------------------------------")
可以从代码中得出:
- table本质是引用型
- 构造函数的实现利用了元表
- 方法=函数,字段=value
二、类的继承
例子如下:
Person = {name = "", age = 0}--语法糖:计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用
--function Person:New(name, age) 定义函数的两种方法,和下面起到的效果完全一样,其中":"是一种语法糖,同等于调用方法的时候把self自己传进去
Person.New = function(self, name, age)local obj = {name = name,age = age}setmetatable(obj, self)self.__index = selfreturn obj
endfunction Person:Show()print(string.format("名字:%s, 年龄:%d", self.name, self.age))--self表示当前"类"的对象,和C#中的this类似
end--Humen为子类
Humen = Person:New() --可以不传参数,默认为nil
function Humen:New(name, age, sex) --重写父类构造函数local obj = {name = name,age = age,sex = sex}setmetatable(obj, self)self.__index = selfreturn obj
endfunction Humen:SonShow() --子类方法print(string.format("名字:%s, 年龄:%d,性别:%s", self.name, self.age, self.sex))--self表示当前"类"的对象,和C#中的this类似
endyou = Person:New("Huangkai", 250)
you:Show()me = Humen:New("Jia", 15, "boy")
me:SonShow()
me:Show()
LuaForUnity7.1:Lua“类与对象”相关推荐
- Lua 面向对象基础-类和对象(一)
目录 1. lua中创建对象 2.lua中定义类的思路 3.元表的概念 4.类的定义和实例化 5. 重写类的方法 lua是一门面向过程的脚本语言,lua语言对于事物.结构通通描述为 table,而类和 ...
- 饥荒时用java写的吗_【图片】类与对象面向对象编程【饥荒mod制作吧】_百度贴吧...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 ----------深入饥荒的类 上一节讲完了基本概念,如果还心存疑虑可以百度搜索"类与对象"以获取更多信息 本节将深入研究饥荒代码中 ...
- C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)
1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...
- C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)
1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...
- C02-程序设计基础提高班(C++)第9周上机任务-类和对象
第9周:阅读教材第8章(p231-262),主要内容是类和对象,学会定义类和对象解决问题,完成第9周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: [任务1]阅读.运行下 ...
- 函数返回类的对象与拷贝构造函数
C++中,如果我们在一个函数中,定义了一个类的对象,然后返回这个对象,在main函数中用一个对象去接受这个返回的对象的时候,这里面参与的函数调用大家可能不熟悉,这里通过程序和注释的方式给大家讲解一下. ...
- ZJU-java进阶笔记 第一、二周(类与对象,对象交互)
对象变量是对象的管理者,而非所有者 VendingMachine vm = new VendingMachine(); this指代当前对象 成员函数可以直接(不需要点运算符)调用本类的其他成员函数 ...
- 3个题目熟悉类和对象基础
1.按要求编写Java应用程序: (1)编写西游记人物类(XiYouJiRenWu)其中属性有:身高(height),名字(name),武器(weapon)方法有:显示名字(printName),显示 ...
- 刻意练习:Python基础 -- Task10. 类与对象
背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...
最新文章
- IT兄弟连 JavaWeb教程 监听器3
- python基础知识点-Python基础中的29个知识点
- linux环境下安装mysql 8.0
- 用sqlalchemy对mysql数据库增删改查demo
- 解决eclipse刚启动卡死的问题~~~亲测有效~~
- NoSQL数据库的分布式算法memcache集群的实现
- Jquery Uploadify插件+Servlet解决FTP多文件上传
- 物联网专用卡的优势有哪些
- adb命令检测手机bl有无上锁_用adb命令解bl锁
- maya导入abc动画_UE4 Alembic 动画资产流程的整理
- CentOS 7 - Securing OpenSSH(二)
- 史上最烂的项目:苦撑 12 年,600 多万行代码
- L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到一个处理错误
- 【直播升级——AWS 云之旅】
- UE4 Gate效果
- 胖人瘦下来后,会长高或变矮吗?
- N1 从 armbian 刷回 webpad 方法
- Go 语言几种运算符
- VMware ESXi 8.0集成网卡驱动
- 计算机英语词典 txt,英汉词典TXT格式英汉词典TXT格式.doc
热门文章
- 2018年python工作好找吗-2018年排名前20的数据科学Python库
- python入门代码-Python入门学习系列——Python代码测试
- python基础知识-Python语言基础知识总结
- npm ERR! Unexpected end of JSON input while parsing near '...Comment: https://open'
- vue element-ui只有一条信息时默认选中按钮,且不能取消,多条信息时可以手动选择
- php将mysql转换为json字符串_在PHP中将MySQL记录集转换为JSON字符串
- respond是空的_httpClient 获取response 中的 content 为空的原因(急求)
- 【离散数学笔记】计数原理:解决计数问题的基本方法
- java 自己的 pid_Java获取自身PID方法搜集
- c语言结构共用体的作用,浅谈C语言共用体和与结构体的区别