xlua学习之路(三)Lua面向对象
简单实例
【lua创建对象】假如我们有一个人,这个人名字将张三,年龄18,在lua中我们可以这样实现
person={name="张三",age=18}
那么现在我们又来了人,名字叫李四,年龄22,于是我们又要写一遍,就像这样
person2={name="李四",age=22}
要是我们有100个人,1000个人就会很繁琐
于是我们就可以写一个模板Person,然后给他写个创建对象的方法,就像这样
Person={name="",age=1}
function Person.new(self,name,age)t={}setmetatable(t,{__index=self})t.name=namet.age=agereturn t
endperson=Person.new(Person,"张三",18)
person2=Person.new(Person,"李四",22)
但是这样每次我们还得把自身传进去也很麻烦,lua语言为我们提供了语法糖,我们可以通过:代替.调用方法,使用:会自动把self传进去
Person={name="",age=1}
function Person:new(name,age)t={}setmetatable(t,{__index=self})t.name=namet.age=agereturn t
endperson=Person:new("张三",18)
person2=Person:new("李四",22)
lua方法是支持重载的,我们可以写很多个new方法,这就有点像c#里面的构造方法
【lua继承】
person={name="",age=1} --基础表
function person:new() --类似于c#的无参构造方法t={} --创建一张空表setmetatable(t,{__index=self}) --设置元表,元表的__index指向自身return t --返回这张表 endfunction person:new(name,age) --重载t={} setmetatable(t,self) --这里换了一种写法,和上面类似 把self自身设置为t表的元表self.__index=self --self的__index指向自身t.name=name t.age=agereturn tendfather=person:new() --创建对象
function father:learn() --为基类对象添加个learn方法 print(self.name.."学习")endson=father:new("李四",23) --创建派生类对象
son:learn() --子类继承了父类的learn方法,字段等
xlua学习之路(三)Lua面向对象相关推荐
- typescript学习之路(三) —— ts定义类的方法(包含es5以及es6的定义类)
提起类,不得不说一下,强类型编程语言,如php,java,c++等都有类的概念.而js作为一门弱类型语言,是没有类这个概念的,虽然也能模拟类的实现,但总归不是类.so,ts也只是模拟类而已,使得更贴切 ...
- Redis——学习之路三(初识redis config配置)
我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. 我们就 ...
- xLua学习之路(三) ------ C#主动发起对Lua数据结构的访问(Lua文件保存格式要为UTF-8)
1.访问全局基本数据类型 定义全局变量: 代码: LuaEnv luaEnv = new LuaEnv();luaEnv.DoString("require 'CSharpCallLua'& ...
- Scala学习笔记(三)——面向对象、类、抽象类、伴生、内部类、样例类、枚举、泛型类、类型边界、型变、特质、动态混入、包
Scala面向对象 Scala面向对象 一.基本概念 1.类的概念 2.类成员访问修饰符 二.类 1.类的定义 2.类的继承 3.抽象类 4.单例对象 5.伴生 6.内部类 7.样例类 8.枚举 9. ...
- 函数式编程学习之路(三)
入门: 函数式编程之艰难,在于这玩意更接近数学,就是数学之"用",大牛们在云端,玩纯数学去了,弄出一堆公式及概念,码农们爬在地上,辛苦耕耘,要的是看得见摸得着的,函数式编程就是要打 ...
- C++学习笔记(三)——面向对象的程序设计
目录 一.类和对象基础 基本知识 1.概念 2.使用类的成员变量和成员函数: 3.类成员可访问的范围 4.构造函数 5.复制构造函数 6.类型转换构造函数 7.析构函数 8.委托构造函数. 9.前向引 ...
- LUA学习之路--初识LUA
LUA在葡萄牙语中是"月亮"的意思.1993年由巴西的Ponifical Catholic University开发.该语言是由一个来自计算机图形技术组织的团队开发,并作为自由软件 ...
- 编程学习笔记(第三篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(3)软件开发的现状、UML扩展...
一.软件开发的现状 软件领域正在发生一个巨变,特别是近几年来,软件领域正在发生翻天覆地的变化. 这一变化主要以这个云 + 端大数据, 这些是随着目前最先进的一些技术的产生而产生的. 随着这些新的技术以 ...
- python 面向对象编程tcp_python 闯关之路三(面向对象与网络编程)
1,简述socket 通信原理 如上图,socket通信建立在应用层与TCP/IP协议组通信(运输层)的中间软件抽象层,它是一组接口,在设计模式中,socket其实就是一个门面模式,它把复杂的TCP/ ...
最新文章
- linux使用世界时间,linux世界里的时间
- 计算机领域收费sci期刊,计算机领域收费sci期刊 - 百度学术
- C++学习笔记目录链接(持续更新中)
- 如何选择物联网软件开发供应商
- 用户操作-登录代码实现
- linux 禁用smb服务,Samba 4.11 发布,更好的可扩展性与默认禁用SMB1
- c语言函数封装成python库_使用f2py将C语言的函数转换为python模块
- python 7-24 sdut-array2-2-局部峰值 (10 分)
- flash特效原理:图片滑动放大效果(3)
- MySql explain命令详解
- URL 编码是什么?
- USB3.0:VL817Q7-C0的LAYOUT指南(三)
- 随机存储器(RAM),只读存储器(ROM),高速缓存(CACHE),内存,硬盘,CPU
- 电子工业的发展也带动了电子设计自动化技术
- Are You a Software Architect?
- python爬虫免登录_爬虫使用cookie免登陆
- C语言模拟回合制游戏 源码
- 二进制与十进制科学记数法举例
- Android手机蓝牙连接笔记本电脑蓝牙
- linux gpt转mbr命令,Diskpart命令将gpt格式转换成mbr教程