前文: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“类与对象”相关推荐

  1. Lua 面向对象基础-类和对象(一)

    目录 1. lua中创建对象 2.lua中定义类的思路 3.元表的概念 4.类的定义和实例化 5. 重写类的方法 lua是一门面向过程的脚本语言,lua语言对于事物.结构通通描述为 table,而类和 ...

  2. 饥荒时用java写的吗_【图片】类与对象面向对象编程【饥荒mod制作吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 ----------深入饥荒的类 上一节讲完了基本概念,如果还心存疑虑可以百度搜索"类与对象"以获取更多信息 本节将深入研究饥荒代码中 ...

  3. C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)

    1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...

  4. C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)

    1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...

  5. C02-程序设计基础提高班(C++)第9周上机任务-类和对象

    第9周:阅读教材第8章(p231-262),主要内容是类和对象,学会定义类和对象解决问题,完成第9周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: [任务1]阅读.运行下 ...

  6. 函数返回类的对象与拷贝构造函数

    C++中,如果我们在一个函数中,定义了一个类的对象,然后返回这个对象,在main函数中用一个对象去接受这个返回的对象的时候,这里面参与的函数调用大家可能不熟悉,这里通过程序和注释的方式给大家讲解一下. ...

  7. ZJU-java进阶笔记 第一、二周(类与对象,对象交互)

    对象变量是对象的管理者,而非所有者 VendingMachine vm = new VendingMachine(); this指代当前对象 成员函数可以直接(不需要点运算符)调用本类的其他成员函数 ...

  8. 3个题目熟悉类和对象基础

    1.按要求编写Java应用程序: (1)编写西游记人物类(XiYouJiRenWu)其中属性有:身高(height),名字(name),武器(weapon)方法有:显示名字(printName),显示 ...

  9. 刻意练习:Python基础 -- Task10. 类与对象

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

最新文章

  1. IT兄弟连 JavaWeb教程 监听器3
  2. python基础知识点-Python基础中的29个知识点
  3. linux环境下安装mysql 8.0
  4. 用sqlalchemy对mysql数据库增删改查demo
  5. 解决eclipse刚启动卡死的问题~~~亲测有效~~
  6. NoSQL数据库的分布式算法memcache集群的实现
  7. Jquery Uploadify插件+Servlet解决FTP多文件上传
  8. 物联网专用卡的优势有哪些
  9. adb命令检测手机bl有无上锁_用adb命令解bl锁
  10. maya导入abc动画_UE4 Alembic 动画资产流程的整理
  11. CentOS 7 - Securing OpenSSH(二)
  12. 史上最烂的项目:苦撑 12 年,600 多万行代码
  13. L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到一个处理错误
  14. 【直播升级——AWS 云之旅】
  15. UE4 Gate效果
  16. 胖人瘦下来后,会长高或变矮吗?
  17. N1 从 armbian 刷回 webpad 方法
  18. Go 语言几种运算符
  19. VMware ESXi 8.0集成网卡驱动
  20. 计算机英语词典 txt,英汉词典TXT格式英汉词典TXT格式.doc

热门文章

  1. 2018年python工作好找吗-2018年排名前20的数据科学Python库
  2. python入门代码-Python入门学习系列——Python代码测试
  3. python基础知识-Python语言基础知识总结
  4. npm ERR! Unexpected end of JSON input while parsing near '...Comment: https://open'
  5. vue element-ui只有一条信息时默认选中按钮,且不能取消,多条信息时可以手动选择
  6. php将mysql转换为json字符串_在PHP中将MySQL记录集转换为JSON字符串
  7. respond是空的_httpClient 获取response 中的 content 为空的原因(急求)
  8. 【离散数学笔记】计数原理:解决计数问题的基本方法
  9. java 自己的 pid_Java获取自身PID方法搜集
  10. c语言结构共用体的作用,浅谈C语言共用体和与结构体的区别