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

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

local class = require 'middleclass'--类的继承
Person = class('Person')  --定义一个Person类
function Person:initialize(name)  --构造函数self.name = name
endfunction Person:speak() --方法print("Hi,i am " ..self.name .. ".")
endAgedPerson = class('AgedPerson',Person) --子类
AgedPerson.static.ADULT_AGE = 18  --类成员function AgedPerson:initialize(name,age)  --子类构造
    Person.initialize(self,name)self.age = age
endfunction AgedPerson:speak()  --子类方法Person.speak(self)   --子类调用父类方法if(self.age < AgedPerson.ADULT_AGE) thenprint("i am underaged")elseprint("i am an adult")end
endlocal p1 = AgedPerson:new('张东升',13) --定义一个子类对象
local p2 = AgedPerson:new('无量',21)
p1:speak()--Mixins 这种特性可以在不同的类之间共享一些函数,
--可以是不同的基类
HasWings =
{fly = function(self)print('flap flap i am a ' .. self.class.name)end
}Animal = class('Animal')  --动物类
Insect = class('Insect',Animal)  --昆虫类
Worm = class('Worm',Insect) --虫子
Bee = class('Bee',Insect) --蜜蜂
Bee:include(HasWings) --增加类成员
Mammal = class('Mammal',Animal) --哺乳动物
Fox = class('Fox',Mammal) --狐狸
Bat = class('Bat',Mammal) --蝙蝠
Bat:include(HasWings) --

local bee = Bee()
local bat = Bat()
bee:fly()
bat:fly()--下在这种方法
DrinksCoffe = {}
function DrinksCoffe:drink(drinkTime)if drinkTime ~= self.class.coffeeTime thenprint(self.name .. ": It is not the time to drink coffee")elseprint(self.name .. ": Mmm I love coffee ad drinkTime")end
endfunction DrinksCoffe:include(klass)print(klass.name .. " drinks coffee at " .. klass.coffeeTime)
endEnglishMan = class('EnglishMan')
EnglishMan.static.coffeeTime = 5
EnglishMan:include(DrinksCoffe)
function EnglishMan:initialize(name) self.name = name endSpaniard = class('Spaniard')
Spaniard.static.coffeeTime = 6
Spaniard:include(DrinksCoffe)
function Spaniard:initialize(name) self.name = name endtom = EnglishMan:new('tom')
juan = Spaniard:new('juan')
tom:drink(5)
juan:drink(5)
juan:drink(6)--为类增加元方法
Point = class('Point')
function Point:initialize(x,y)self.x = xself.y = y
endfunction Point:__tostring()return 'Point:[' .. tostring(self.x) .. ',' .. tostring(self.y) .. ']'
end
p1 = Point(100,200)
print(p1)

出处:http://www.cnblogs.com/zhangdongsheng/
作者:张东升

lua类库 middleclass学习笔记相关推荐

  1. slua 是c语言开发的吗,初学者必备文档:LUA新手快速学习笔记

    LUA程序设计语言 是一个简洁.轻量.可扩展的脚本语言.LUA读作/'lua/(噜啊),是葡萄牙语中"Luna"(月亮)的意思. LUA的目标是成为一个很容易嵌入其它语言中使用的语 ...

  2. 微信小程序连接物联网(二):NodeMCU Lua学习笔记

    索引 这是用微信小程序遥控开门的系列文章,具体微信小程序连接物联网的代码在第三章提及. 微信小程序连接物联网(一):初始化ESP8266 NodeMCU 微信小程序连接物联网(二):NodeMCU L ...

  3. Lua学习笔记6:C++和Lua的相互调用

    曾经一直用C++写代码.话说近期刚换工作.项目组中的是cocos2dx-lua,各种被虐的非常慘啊有木有. 新建cocos2dx-lua项目.打开class能够发现,事实上就是C++项目啦,只是为什么 ...

  4. 窗体 局部变量转换为全局_Unity 热更新解决方案 学习笔记(12)Lua 全局变量和局部变量...

    笔者只是一位刚大三的学生本文章仅为学习笔记,非专业教程,仅供参考和学习交流!!! 如有错误或更好的方案欢迎指出和探讨!!! 全局变量 顾名思义,其生命有效期是全局的,整个lua文件中都可以使用,可以在 ...

  5. Lua入门系列----pil学习笔记之Getting Start

    本文作者:sodme 本文出处:http://blog.csdn.net/sodme 声明: 本文可以不经作者同意, 任意复制, 转载, 但任何对本文的引用都请保留文章开始前三行的作者, 出处以及声明 ...

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

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

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

    http://www.cnblogs.com/lzrabbit/archive/2012/05/01/2477607.html 上文NuGet学习笔记(1) 初识NuGet及快速安装使用说到NuGet ...

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

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

  9. Lua 学习笔记(一)

    Lua学习笔记 1.lua的优势 a.可扩张性     b.简单     c.高效率     d.和平台无关 2.注释 a.单行注释 --        b.多行注释 --[[  --]] 3.类型和 ...

最新文章

  1. 5G商用对视频会议市场增长具有积极意义
  2. Understanding CORS
  3. 第九周项目二-我的数组类
  4. [名词解释] intuitive
  5. springboot 按钮权限验证_springboot学习之权限系统登录验证SpringSecurity
  6. C和C++中static的用法及友元
  7. java main启动spring_gradle 搭建springMVC项目,main函数启动
  8. python函数实例与类实例_python – 在类和实例上表现不同的函数
  9. 【Java】四种方法复制视频文件比较
  10. MessasgePack:一个小巧高效的序列化方式
  11. 记录利用CSS完美解决前端图片变形问题
  12. zookeeper资料
  13. mbedtls基础及其应用
  14. 【小白入门案例系列】Python全年天数查询小系统上线!
  15. 使用bootstrap图片上传插件(fileInput)springmvc实现图片上传全流程
  16. #项目的编译和发布 #静态发布新浪云 #node服务器发布新浪云 #nodejs服务器部署数据库 #新浪云前后端结合
  17. ASP 模板引擎,ASP 模板类 (Taihom.Template.class)
  18. 找质数算法之埃拉托色尼筛选法(Sieve of Eratosthenes算法)
  19. OpenCV:imwrite存储图像后为全黑
  20. Ubuntu 16.04下装ROS Kinetic问题若干、安装后首次运行

热门文章

  1. 查看网站上保存的密码
  2. app.listen(3000)与app是不一样的
  3. Windows服务初探
  4. 【C++】函数指针的嵌套
  5. Sentinel 1.5.0 正式发布,引入 Reactive 支持
  6. 良田高拍仪集成vue项目
  7. python爬虫xpath的语法
  8. Halcon 彩色图片通道分割处理
  9. java.security.InvalidKeyException: Illegal key size异常解决
  10. 交换机使用QoS来对端口限速