简单实例

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面向对象相关推荐

  1. typescript学习之路(三) —— ts定义类的方法(包含es5以及es6的定义类)

    提起类,不得不说一下,强类型编程语言,如php,java,c++等都有类的概念.而js作为一门弱类型语言,是没有类这个概念的,虽然也能模拟类的实现,但总归不是类.so,ts也只是模拟类而已,使得更贴切 ...

  2. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. 我们就 ...

  3. xLua学习之路(三) ------ C#主动发起对Lua数据结构的访问(Lua文件保存格式要为UTF-8)

    1.访问全局基本数据类型 定义全局变量: 代码: LuaEnv luaEnv = new LuaEnv();luaEnv.DoString("require 'CSharpCallLua'& ...

  4. Scala学习笔记(三)——面向对象、类、抽象类、伴生、内部类、样例类、枚举、泛型类、类型边界、型变、特质、动态混入、包

    Scala面向对象 Scala面向对象 一.基本概念 1.类的概念 2.类成员访问修饰符 二.类 1.类的定义 2.类的继承 3.抽象类 4.单例对象 5.伴生 6.内部类 7.样例类 8.枚举 9. ...

  5. 函数式编程学习之路(三)

    入门: 函数式编程之艰难,在于这玩意更接近数学,就是数学之"用",大牛们在云端,玩纯数学去了,弄出一堆公式及概念,码农们爬在地上,辛苦耕耘,要的是看得见摸得着的,函数式编程就是要打 ...

  6. C++学习笔记(三)——面向对象的程序设计

    目录 一.类和对象基础 基本知识 1.概念 2.使用类的成员变量和成员函数: 3.类成员可访问的范围 4.构造函数 5.复制构造函数 6.类型转换构造函数 7.析构函数 8.委托构造函数. 9.前向引 ...

  7. LUA学习之路--初识LUA

    LUA在葡萄牙语中是"月亮"的意思.1993年由巴西的Ponifical Catholic University开发.该语言是由一个来自计算机图形技术组织的团队开发,并作为自由软件 ...

  8. 编程学习笔记(第三篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(3)软件开发的现状、UML扩展...

    一.软件开发的现状 软件领域正在发生一个巨变,特别是近几年来,软件领域正在发生翻天覆地的变化. 这一变化主要以这个云 + 端大数据, 这些是随着目前最先进的一些技术的产生而产生的. 随着这些新的技术以 ...

  9. python 面向对象编程tcp_python 闯关之路三(面向对象与网络编程)

    1,简述socket 通信原理 如上图,socket通信建立在应用层与TCP/IP协议组通信(运输层)的中间软件抽象层,它是一组接口,在设计模式中,socket其实就是一个门面模式,它把复杂的TCP/ ...

最新文章

  1. linux使用世界时间,linux世界里的时间
  2. 计算机领域收费sci期刊,计算机领域收费sci期刊 - 百度学术
  3. C++学习笔记目录链接(持续更新中)
  4. 如何选择物联网软件开发供应商
  5. 用户操作-登录代码实现
  6. linux 禁用smb服务,Samba 4.11 发布,更好的可扩展性与默认禁用SMB1
  7. c语言函数封装成python库_使用f2py将C语言的函数转换为python模块
  8. python 7-24 sdut-array2-2-局部峰值 (10 分)
  9. flash特效原理:图片滑动放大效果(3)
  10. MySql explain命令详解
  11. URL 编码是什么?
  12. USB3.0:VL817Q7-C0的LAYOUT指南(三)
  13. 随机存储器(RAM),只读存储器(ROM),高速缓存(CACHE),内存,硬盘,CPU
  14. 电子工业的发展也带动了电子设计自动化技术
  15. Are You a Software Architect?
  16. python爬虫免登录_爬虫使用cookie免登陆
  17. C语言模拟回合制游戏 源码
  18. 二进制与十进制科学记数法举例
  19. Android手机蓝牙连接笔记本电脑蓝牙
  20. linux gpt转mbr命令,Diskpart命令将gpt格式转换成mbr教程

热门文章

  1. C#使用Unity3D开发安卓app控制PLC,控制实验室灯光开关
  2. 腾讯游戏学院专家:UE高级性能剖析技术之RHI
  3. SQL语句之聚合函数
  4. 变量基础知识和如何接受键盘输入的值
  5. python大作业80个_大黄蜂35个彩蛋解析!!你必看的80年代大风暴
  6. python PyQt5安装步骤
  7. 数据分析毕业设计 招聘网站大数据分析与可视化系统 - python flask
  8. python求小数_python-查找小数位的简单方法
  9. matlab中trapz,MATLAB中trapz和cumtrapz函数
  10. 使用BELLHOP软件生成声场信息