《Programming in Lua 3》读书笔记(十二)
日期:2014.7.14
e.g.
Account = {blanche = 0}
function Account.withdraw(v)Account.balance = Account.balance - v
end
e.g.
a , Account = Account,nil
a.withdraw(100.00) --error
e.g.
function Account.withdraw(self,v)self.balance = self.balance - v
end
a , Account = Account,nil
a.withdraw(100.00) --ok
e.g.
function Account:withdraw(v)self.balance = self.balance - v
end
e.g.
Account = {balance = 0,withdraw = function (self,v)self.balance = self.balance - vend}
function Account:deposit (v)self.balance = self.balance + v
end
Account.deposit(Account,200)
e.g.
setmetatable(a,{__index = b})
e.g.
function Account:new(o)o = o or {}setmetatable(o,self)self.__index = selfreturn o
end
a = Account:new(balance = 0}
a:deposit(100.00)
b = Account:new()
print(b.balance) --- 0 继承了Account的balance的值0
e.g.
--基类
Account = {balance = 0 }
function Account:new(o)o = o or {}setmetatable(0,self)self.__index = selfreturn o
end
function Account:deposit(v)self.balance = self.balance + v
end
function Account:withdraw(v)if v > self.balance then error "xxx" endself.balance = self.balance - v
end
e.g.
s:deposit(100.00)
e.g.
function SpecialAccount:withdraw(v)if v - self.balance >= self.getLimit() thenerror"xx"endself.balance = self.balance - v
end
function SpecialAccount:getLimit()return self.limit or 0
end
e.g.
function s:getLimit()return self.balance * 0.10
end
e.g.
--假定现在有两个类,之前的Account和现在的Named
Named = {}
function Named:getname()return self.name
end
function Named:setname(v)self.name = v
end--在plist这个table中寻找k
local function search(k,plist)for i = 1,#plist dolocal v = plist[i][k]if v then return v endend
endfunction createClass(…)local c = {} --新的类local parents = { … }--从父类table中找到各个父类中的方法setmetatable(c,{ __index = function (t,k)return search(k,parents)end} ) --多重继承的技巧在于此处,__index 元方法是一个函数,该函数会从父类列表中寻找每个父类中的所有方法,这样就实现了多重继承--新的类成为其实例的元表c.__index = c--创建新的类的构造方法function c:new(o)o = o or {}setmetatable(o,c)return oendreturn c
end
account = NamedAccount:new{name = "abcd"}
print(account:getname())
setmetatable(c,{ __index = function ( t,k )local v = search(k,parents)t[k] = vreturn vend})
e.g.
function newAccount( initialBalance )local self = {balance = initialBalance}local withdraw = function ( v )self.balance = self.balance + vendlocal getBalance = function ( ... )return self.balanceendreturn{withdraw = withdraw,deposit = deposit,getBalance = getBalance}
end
e.g.
acc1 = newAccount(100.00)
acc1.withdraw(40.00)
print(acc1.getBalance())
e.g.
print("The Single-Method Approach \n")
function newObject( value )return function ( action,v )if action == "get" then return valueelseif action == "set" then value = velse error("invalid action")endend
endd = newObject(0)
print(d("get"))
d("set",10)
print(d("get"))
转载于:https://www.cnblogs.com/zhong-dev/p/4044574.html
《Programming in Lua 3》读书笔记(十二)相关推荐
- Java 读书笔记 (十二) Java Character 类
在实际开发过程中, 我们经常会遇到需要使用对象,而不是内置数据类型的情况. 为了解决这个问题, Java语言为内置数据类型char提供了包装类Character类. 可以使用Character的构造方 ...
- 深入理解Java虚拟机读书笔记十二
第 7 章虚拟机类加载机制 7. 1.概述 虚拟机把描述类的'数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. ...
- 主成分分析碎石图_ISLR读书笔记十九:主成分分析(PCA)
本文使用 Zhihu On VSCode 创作并发布 前面写的一些统计学习方法都是属于监督学习(supervised learning),这篇主成分分析(principal components an ...
- OREILLY Programming .NET 3.5 读书笔记之一
OREILLY Programming .NET 3.5 读书笔记之一 <Programming .NET 3.5>是OREILLY 2008.08出版的.NET 3.5 开发书籍,作者是 ...
- Python语言入门这一篇就够了-学习笔记(十二万字)
Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...
- 曾国藩读书的十二条规矩
曾国藩读书的十二条规矩 曾国藩,清代名臣,他既是镇压太平天国将士的刽子手,又是一个治学严谨.博览群书的理论家和古文学家. 曾国藩是湖南湘乡县(今双峰县)人,清嘉庆十六年(1811年)出生于一个穷山僻谷 ...
- 深入分析Java Web技术内幕读书笔记(二)浅析DNS域名解析过程
上一篇文章<浅析Web请求过程>讲述的是如何发起HTTP请求,对于请求发起过程中很重要的一个步骤--DNS解析过程的描述是一带而过,本篇文章将跟着DNS解析过程来分析域名是如何解析的. 一 ...
- Linux设备驱动程式之读书笔记(二) [转]
http://www.sudu.cn/info/html/edu/code/20070102/286543.html setlevel.c 非常实用 google 查找 #define _syscal ...
- 重构(Refactoring)技巧读书笔记 之二
重构(Refactoring)技巧读书笔记 之二<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:of ...
最新文章
- linux写命令时方便的快捷键以及Vim必备命令
- [Tool]靜態程式碼分析-FxCop
- 解决This picacion faied to trt becuse t could, not find or load the Qt platform plugin “windows““问题
- ConcurrentLinkedQueue
- 深度学习笔记(35) 滑动窗口的卷积实现
- docx文档怎么排列图片_“胶水语言”办公自动化Word篇——使用Python编辑和读取Word文档
- Spring学习总结(27)——Spring常用注解再总结
- JavaScript把客户端时间转换为北京时间
- python3中解码base64(线下base64解码模板)
- Android中英文单词录入背诵软件
- 【微软小冰】多轮和情感机器人的先行者
- C语言找n以上最小质数,[原创]求质数(C语言描述)
- matlab将txt转成dat,将matlab中数据保存为txt或dat格式
- 洛谷T30768 动感超人520
- 足疗小张和面向对象的7个设计原则
- 接口管理工具Rap的安装
- PCB板不同材质区别
- 和量子计算有什么区别 并发_超级计算机和量子计算机有什么区别?
- mysql 二进制 nodejs_Linux 下安装NodeJS (二进制包)
- git-lfs使用笔记
热门文章
- php创建表并插入数据,php数据库操作-创建库和表以及插入数据
- 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波4 - 分段线性变换 - 对比度拉伸
- Python利用matplotlib.animation和matplotlib.pyplot和ffmpeg录制动画并保存为MP4文件
- POJ 1723 Soldiers (中位数)
- 修改SQL server数据库中的逻辑文件名
- 全国计算机等级考试题库二级C操作题100套(第60套)
- rh php56 php,在全球范围内提供RHSCL PHP的最佳方法
- yii2 php反射,Yii2.0-advanced-3—为yii2添加后台模板adminlte和权限组件yii2-adm
- windows os x linux,What languages are Windows, Mac OS X and Linux written in?
- 开发工具:Git和SVN有哪些差异,看完你就懂了?