Lua的面向对象实现方式
来源:互联网 发布:淘宝手工护肤良心店 编辑:程序博客网 时间:2024/05/17 23:22
1、先看一个简单的例子
function create(name, id) local obj = { name = name, id = id } function obj:SetName(name) self.name = name end function obj:GetName() return self.name end function obj:SetId(id) self.id = id end function obj:GetId()return self.id end return objend
o1 = create("Sam", 001)print("o1's name:", o1:GetName(), "o1's id:", o1:GetId())o1:SetId(100)o1:SetName("Lucy")print("o1's name:", o1:GetName(), "o1's id:", o1:GetId())输出结果:o1's name: Sam o1's id: 1o1's name: Lucy o1's id: 100
2、几种实现对象的方式
a、对象工厂模式
如前面代码的create函数
b、用表来表示对象
把对象的数据和方法都放在一张表内,虽然没有隐藏私有成员,但对于简单脚本来说完全可以接受。
成员方法的定义
function obj:method(a1, a2, ...) … end 等价于(冒号)
function obj.method(self, a1, a2, ...) … end 等价于(点号)
obj.method = function (self, a1, a2, ...) … end
成员方法的调用
obj:method(a1, a2, …) 等价于 obj.method(obj, a1, a2, ...)
3、对象的简单继承
function createRobot(name, id) local obj = { name = name, id = id } function obj:SetName(name) self.name = name end function obj:GetName() return self.name end function obj:GetId() return self.id end return objendfunction createFootballRobot(name, id, position) local obj = createRobot(name, id) obj.position = "right back" function obj:SetPosition(p) self.position = p end function obj:GetPosition() return self.position end return objend
4、函数闭包
一个函数和它所使用的所有upvalue构成了一个函数闭包。
Upvalue
一个函数所使用的定义在它的函数体之外的局部变量(external local variable)称为这个函数的upvalue。
function createCountdownTimer(second) local ms = second * 1000 local function countDown() ms = ms - 1 return ms end return countDownendtimer1 = createCountdownTimer(1)for i = 1, 3 do print(timer1())endprint("------------")timer2 = createCountdownTimer(1)for i = 1, 3 do print(timer2())end输出结果:999998997------------999998997
在前面的代码中,函数countDown使用的定义在函数createCountdownTimer中的局部变量ms就是countDown的upvalue,但ms对createCountdownTimer而言只是一个局部变量,不是upvalue。
0 0
- Lua的面向对象实现方式
- 函数闭包的方式实现lua面向对象
- Lua:复制表的方式实现面向对象
- Lua:函数闭包的方式实现面向对象
- Lua面向对象的实现
- lua的面向对象实现
- Lua 面向对象实现
- lua实现面向对象
- lua实现面向对象
- lua实现面向对象
- 【Lua】面向对象实现
- Lua面向对象实现
- Lua面向对象实现
- lua 实现面向对象
- lua实现面向对象的特性
- lua实现面向对象的特性
- lua实现面向对象的特性
- lua实现面向对象的特性
- 懵懂记录C#委托的使用
- JPanel与JFrame的区别
- 【MySQL】查看MySQL配置文件路径及相关配置
- 不再迷惘,执着于我的方向
- Eclipse快捷键大全
- Lua的面向对象实现方式
- VS2012自带的 性能分析 工具使用实例
- 谷歌postman插件的安装与使用
- java String unicode 转换
- Internet Explorer的“五代同堂”
- java中ArrayList深拷贝有关问题
- TI DSP
- 【叶子函数分享五十八】固定长度添加分隔符函数
- zookeeper客户端代码解读