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. Jquery学习之路(三) 实现弹出层插件

    弹出层的应用还是比较多的,登陆,一些同页面的操作,别人的总归是别人的,自己的才是自己的,所以一直以来想写个弹出层插件.不多废话,直接开始吧! 不想看可以在这里直接下载源码xsPop.zip 1:遮罩层 ...

  2. 只用120行Java代码写一个自己的区块链-2网络

    已经看完第一章的内容了吗,欢迎回来. 上一章我们介绍了关于怎么去编写自己的区块链,完成哈希和新块的校验.但是它只是在一个终端(结点)上跑.我们怎么样来连接其他结点以及贡献新的块呢,怎么样广播到其他结点 ...

  3. 走进Spark--云计算大数据新一代技术

    什么是Spark? 当然这里说的Spark指的是Apache Spark, Apache Spark™ is a fast and general engine for large-scale dat ...

  4. HDU 2521 反素数(数论,比较)

    #include<iostream> #include<cstring> #include<cmath> #include<cstdio> using ...

  5. (转) C#解惑:HashSet<T>类

    HashSet<T>是一个相对“冷门”的类型,平时在项目中用得不多,但是在特定的业务中可以大用. 先来了解下HashSet<T>类,主要被设计用来存储集合,做高性能集运算,例如 ...

  6. HTTP状态代码集

    所有 HTTP 状态代码及其定义.   代码  指示     2xx  成功     200  正常:请求已完成.     201  正常:紧接 POST 命令.     202  正常:已接受用于处 ...

  7. Codechef A Game With a Sheet of Paper

    Discription Yuuko and Nagi like to play the following game: Initially they take a checkered sheet of ...

  8. POJ 3622 Gourmet Grazers(贪心)

    [题目链接] http://poj.org/problem?id=3622 [题目大意] 给出一些物品拥有两个属性值,价格和精美程度 给出一些需求表示要求获得的物品两个属性值的两种属性下界, 一个物品 ...

  9. 【前缀和】【前缀MAX】洛谷 P1351 NOIP2014提高组 day1 T2 联合权值

    不难发现,树中与某个点距离为2的点只可能是它的父亲的父亲.儿子的儿子 或者 兄弟,分类讨论一下即可. 只有对于兄弟我们不能暴力搞,维护一下每个节点的所有儿子的前缀和.前缀MAX就行了. #includ ...

  10. activemq 5.13.2 jdbc 数据库持久化 异常 找不到驱动程序

    原文:https://my.oschina.net/u/2284972/blog/662033 摘要: activemq jdbc 数据库持久化 异常 找不到驱动程序 Caused by: java. ...