lua的面向对象实现
2015-02-28 14:57
225 查看
很多语言专门提供了某种机制组织全局变量的命名,比如 Modula 的 modules,Java和 Perl 的 packages,C++的 namespaces。每一种机制对在 package 中声明的元素的可见性以及其他一些细节的使用都有不同的规则。但是他们都提供了一种避免不同库中命名冲突的问题的机制。每一个程序库创建自己的命名空间,在这个命名空间中定义的名字和其他命名空间中定义的名字互不干涉。Lua 并没有提供明确的机制来实现 packages。然而,我们通过语言提供的基本的机制很容易实现他。主要的思想是:像标准库一样,使用表来描述
package。
Account.lua
SpecialAccount.lua
lua_main.lua --脚本测试
采用此结构完成的脚本代码重用率高,管理方便。
package。
Account.lua
module("Account", package.seeall) --文件名即包名称 function Account() --对象类就是方法的返回值(当然一个包可以定义两个对象了) local objAccout = { balance = 0} --局部变量储存对象 function objAccout:deposit(v) --定义方法 self.balance = self.balance + v end function objAccout:new(o) --原型继承方法 o = o or {} setmetatable(o, self) self.__index = self return o end function objAccout:withdraw (v) --定义方法 if v > self.balance then error"insufficient funds" end self.balance = self.balance - v end return objAccout --返回对象 end
SpecialAccount.lua
module("SpecialAccount", package.seeall) --文件名即包名称 function SpecialAccount() --对象类就是方法的返回值(当然一个包可以定义两个对象了) packMap = require "Account" --获取包 local Account = packMap.Account() --获取Account对象 local objSpecialAccount = Account:new() --继承Account对象 function objSpecialAccount:withdraw (v) --覆写方法 if v - self.balance >= self:getLimit() then error"insufficient funds" end self.balance = self.balance - v end function objSpecialAccount:getLimit () --新增方法 return self.limit or 0 end return objSpecialAccount end
lua_main.lua --脚本测试
packMap = require "SpecialAccount" SpecialAccount = packMap.SpecialAccount() s = SpecialAccount:new{limit=1000.00} s:deposit(100.00) s:withdraw(200.00) print(s.balance)
采用此结构完成的脚本代码重用率高,管理方便。
相关文章推荐
- lua面向对象实现-类实例化对象、继承、多态、多继承、lua单例模式
- lua面向对象实现-类实例化对象、继承、多态、多继承、lua单例模式
- Lua的面向对象实现方式
- 【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态
- lua的面向对象实现
- Lua程序设计(三)面向对象实现一个简单的类
- Lua面向对象实现
- lua面向对象实现的(记)
- Lua学习笔记(五):面向对象的实现
- Lua面向对象实现
- 转载和积累系列 - Lua 有趣的面向对象实现
- lua面向对象实现-类实例化对象、继承、多态、多继承、lua单例模式
- lua面向对象实现(实例化对象、继承、多态、多继承、单例模式)
- lua面向对象类,继承和多重继承的实现
- lua面向对象实现-类实例化对象、继承、多态、多继承、lua单例模式
- Lua笔记19 面向对象实现__index
- Lua 面向对象实现
- 面向对象实现Even算法
- 《面向对象基础:C++实现》学习笔记之八
- Javascript实现最简跨平台面向对象拖拽