middleclass使在lua中面象对象变的简单

抄了一遍他的示例代码运行着试了试,基本懂了

  1. local class = require 'middleclass'
  2.  
  3. --类的继承
  4. Person = class('Person') --定义一个Person
  5. function Person:initialize(name) --构造函数
  6. self.name = name
  7. end
  8.  
  9. function Person:speak() --方法
  10. print("Hi,i am " ..self.name .. ".")
  11. end
  12.  
  13. AgedPerson = class('AgedPerson',Person) --子类
  14. AgedPerson.static.ADULT_AGE = --类成员
  15.  
  16. function AgedPerson:initialize(name,age) --子类构造
  17. Person.initialize(self,name)
  18. self.age = age
  19. end
  20.  
  21. function AgedPerson:speak() --子类方法
  22. Person.speak(self) --子类调用父类方法
  23. if(self.age < AgedPerson.ADULT_AGE) then
  24. print("i am underaged")
  25. else
  26. print("i am an adult")
  27. end
  28. end
  29.  
  30. local p1 = AgedPerson:new('张东升',) --定义一个子类对象
  31. local p2 = AgedPerson:new('无量',)
  32. p1:speak()
  33.  
  34. --Mixins 这种特性可以在不同的类之间共享一些函数,
  35. --可以是不同的基类
  36. HasWings =
  37. {
  38. fly = function(self)
  39. print('flap flap i am a ' .. self.class.name)
  40. end
  41. }
  42.  
  43. Animal = class('Animal') --动物类
  44. Insect = class('Insect',Animal) --昆虫类
  45. Worm = class('Worm',Insect) --虫子
  46. Bee = class('Bee',Insect) --蜜蜂
  47. Bee:include(HasWings) --增加类成员
  48. Mammal = class('Mammal',Animal) --哺乳动物
  49. Fox = class('Fox',Mammal) --狐狸
  50. Bat = class('Bat',Mammal) --蝙蝠
  51. Bat:include(HasWings) --
  52.  
  53. local bee = Bee()
  54. local bat = Bat()
  55. bee:fly()
  56. bat:fly()
  57.  
  58. --下在这种方法
  59. DrinksCoffe = {}
  60. function DrinksCoffe:drink(drinkTime)
  61. if drinkTime ~= self.class.coffeeTime then
  62. print(self.name .. ": It is not the time to drink coffee")
  63. else
  64. print(self.name .. ": Mmm I love coffee ad drinkTime")
  65. end
  66. end
  67.  
  68. function DrinksCoffe:include(klass)
  69. print(klass.name .. " drinks coffee at " .. klass.coffeeTime)
  70. end
  71.  
  72. EnglishMan = class('EnglishMan')
  73. EnglishMan.static.coffeeTime =
  74. EnglishMan:include(DrinksCoffe)
  75. function EnglishMan:initialize(name) self.name = name end
  76.  
  77. Spaniard = class('Spaniard')
  78. Spaniard.static.coffeeTime =
  79. Spaniard:include(DrinksCoffe)
  80. function Spaniard:initialize(name) self.name = name end
  81.  
  82. tom = EnglishMan:new('tom')
  83. juan = Spaniard:new('juan')
  84. tom:drink()
  85. juan:drink()
  86. juan:drink()
  87.  
  88. --为类增加元方法
  89. Point = class('Point')
  90. function Point:initialize(x,y)
  91. self.x = x
  92. self.y = y
  93. end
  94.  
  95. function Point:__tostring()
  96. return 'Point:[' .. tostring(self.x) .. ',' .. tostring(self.y) .. ']'
  97. end
  98. p1 = Point(,)
  99. print(p1)

lua类库 middleclass学习笔记的更多相关文章

  1. Lua数据结构的学习笔记

    更多详细内容请查看:http://www.111cn.net/sys/linux/59911.htm table是Lua中唯一的数据结构,其他语言所提供的其他数据结构比如:arrays.records ...

  2. Lua编程入门-学习笔记2

    第6章 深入函数 函数是一种“第一类值(First-Class Value)”,他们具有特定的词法域(lexical scoping) 将表达式“function(x) <body> en ...

  3. Lua编程入门-学习笔记1

    第1章:起点 Chunks: 语句块 每个语句结尾的分号是可选的,如果同一行有多个语句最好使用分号分隔: dofile("lib1.lua")  -- 执行lua文件 全局变量:局 ...

  4. Lua 5.1 学习笔记

    1 简介 2 语法 2.1 语法约定 2.1.1 保留关键字 2.1.2 操作符 2.1.3 字符串定义 2.2 值与类型 2.2.1 强制转换 2.3 变量 2.3.1 索引 2.3.2 环境表 2 ...

  5. NuGet学习笔记

    NuGet学习笔记(1)——初识NuGet及快速安装使用 NuGet学习笔记(2)——使用图形化界面打包自己的类库 NuGet学习笔记(3)——搭建属于自己的NuGet服务器

  6. NuGet学习笔记(2) 使用图形化界面打包自己的类库

    上文NuGet学习笔记(1) 初识NuGet及快速安装使用说到NuGet相对于我们最重要的功能是能够搭建自己的NuGet服务器,实现公司内部类库的轻松共享更新.在安装好NuGet扩展后,我们已经能够通 ...

  7. [转]LUA 学习笔记

    Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...

  8. uLua学习笔记(三):Unity3D和Lua之间的相互调用

    这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下: 先赞一个! Unity3D调用Lua Unity3D调用Lua的方 ...

  9. NuGet学习笔记(2)——使用图形化界面打包自己的类库

    上文NuGet学习笔记(1) 初识NuGet及快速安装使用说到NuGet相对于我们最重要的功能是能够搭建自己的NuGet服务器,实现公司内部类库的轻松共享更新.在安装好NuGet扩展后,我们已经能够通 ...

随机推荐

  1. C# axWindowsMediaPlayer制作播放器

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. 分分钟搞定 JSP 技术

    一.JSP的语法    1.模版元素        写在JSP中的html内容        在翻译后的Servlet中, 直接被out.write原样输出 2.JSP脚本表达式        格式: ...

  3. HDU 6208 The Dominator of Strings【AC自动机/kmp/Sunday算法】

    Problem Description Here you have a set of strings. A dominator is a string of the set dominating al ...

  4. 百度之星资格赛 2016 Problem 1002

    本文链接:http://www.cnblogs.com/Ash-ly/p/5494623.html 题意: 度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个 ...

  5. SPOJ GSS2 - Can you answer these queries II(线段树 区间修改+区间查询)(后缀和)

    GSS2 - Can you answer these queries II #tree Being a completist and a simplist, kid Yang Zhe cannot ...

  6. ret2dir:Rethinking Kernel Isolation(翻译)

    前一段时间在网上找ret2dir的资料,一直没找到比较系统的介绍,于是干脆把这篇经典的论文翻译了,当然,第一次翻译(而且还这么长),很多词汇不知道到底该怎么翻译,而且最近事情也比较多, 翻译得挺烂的, ...

  7. luogu P1824 进击的奶牛

    题目描述 Farmer John建造了一个有N(2<=N<=100,000)个隔间的牛棚,这些隔间分布在一条直线上,坐标是x1,...,xN (0<=xi<=1,000,000 ...

  8. 【贪心】【multiset】 Codeforces Round #401 (Div. 2) B. Game of Credit Cards

    对第一个人的排序,然后从小到大处理,对第一个人的每枚卡片,从第二个人的卡片中选择一个大于等于它的最小的,否则选择一个当前剩下的最小的,这样可以保证负场最少. 如果选择的改成大于它的最小的,就可以保证胜 ...

  9. 【差分约束系统】【spfa】UVALive - 4885 - Task

    差分约束系统讲解看这里:http://blog.csdn.net/xuezhongfenfei/article/details/8685313 模板题,不多说.要注意的一点是!!!对于带有within ...

  10. 【树链剖分】【线段树】bzoj3626 [LNOI2014]LCA

    引用题解: http://blog.csdn.net/popoqqq/article/details/38823457 题目大意: 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深 ...