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

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

local class = require 'middleclass'

--类的继承
Person = class('Person') --定义一个Person类
function Person:initialize(name) --构造函数
self.name = name
end function Person:speak() --方法
print("Hi,i am " ..self.name .. ".")
end AgedPerson = class('AgedPerson',Person) --子类
AgedPerson.static.ADULT_AGE = --类成员 function AgedPerson:initialize(name,age) --子类构造
Person.initialize(self,name)
self.age = age
end function AgedPerson:speak() --子类方法
Person.speak(self) --子类调用父类方法
if(self.age < AgedPerson.ADULT_AGE) then
print("i am underaged")
else
print("i am an adult")
end
end local p1 = AgedPerson:new('张东升',) --定义一个子类对象
local p2 = AgedPerson:new('无量',)
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 then
print(self.name .. ": It is not the time to drink coffee")
else
print(self.name .. ": Mmm I love coffee ad drinkTime")
end
end function DrinksCoffe:include(klass)
print(klass.name .. " drinks coffee at " .. klass.coffeeTime)
end EnglishMan = class('EnglishMan')
EnglishMan.static.coffeeTime =
EnglishMan:include(DrinksCoffe)
function EnglishMan:initialize(name) self.name = name end Spaniard = class('Spaniard')
Spaniard.static.coffeeTime =
Spaniard:include(DrinksCoffe)
function Spaniard:initialize(name) self.name = name end tom = EnglishMan:new('tom')
juan = Spaniard:new('juan')
tom:drink()
juan:drink()
juan:drink() --为类增加元方法
Point = class('Point')
function Point:initialize(x,y)
self.x = x
self.y = y
end function Point:__tostring()
return 'Point:[' .. tostring(self.x) .. ',' .. tostring(self.y) .. ']'
end
p1 = Point(,)
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. ubuntu下配置ProFtpd服务使用sqlite3作为后端用户认证

    个人机器需要开个文件共享,Linux机器懒得配置SMB,就直接安装了ProFtpd,以做FTP服务器 Ubuntu安装挺简单,可使用就不那么友好了,配合GAdmin-Proftpd,一样不好用. 首先 ...

  2. css-demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 【OpenStack Cinder】Cinder安装时遇到的一些坑

    最近需要安装Cinder组件,然后遇到了两个比较蛋疼的错误导致controller节点输入cinder service-list一直不能显示cinder节点上的cinder-volume服务. 错误1 ...

  4. HTTP隧道工具HTTPTunnel

    HTTP隧道工具HTTPTunnel   在很多服务器上,防火墙会限制主机的出站流量,只允许80之类的端口.如果要使用其他端口,只能通过HTTP隧道方式实现.Kali Linux提供一款HTTP隧道工 ...

  5. JavaScript函数中的参数(arguments)

    arguments argument是JavaScript中的一个关键字,用于指向调用者传入的所有参数. function example(x){ alert(x); alert(arguments. ...

  6. UVA GCD - Extreme (II)

    discription Given the value of N, you will have to find the value of G. The definition of G is given ...

  7. [LOJ6437]PKUSC

    旋转多边形是没有前途的,我们考虑旋转敌人,那么答案就是所有人的可行区间长度之和除以$2\pi$ 首先对每个敌人找到那些旋转后会落到多边形上的角度,实际上就是圆和一些线段求交,解方程即可,注意判一下落在 ...

  8. 使用强大的可视化工具redislive来监控我们的redis

    原文:http://www.cnblogs.com/huangxincheng/archive/2016/06/08/5571185.html 作为玩windows的码农,在centos上面装点东西, ...

  9. 你真的了解try{ return }finally{}中的return?(转载)

    发现一篇有意思的博文,分享一下 谁能给我我解释一下这段程序的结果为什么是:2.而不是:3 代码如下: class Test { public int aaa() { int x = 1; try { ...

  10. kubernetes环境下私有仓库搭建

    前期在客户那里搭建了基本运行环境,鉴于很多企业的环境都是内部网无法连接外部,因此搭建私有仓库是逃避不开的问题,按照网上的步骤搭建,虽然遇到一些问题,但还好都算容易解决了,下面大致把步骤记录一下便于下次 ...