4.Lua面向对象概念
来源:互联网 发布:linux dns如何配置文件 编辑:程序博客网 时间:2024/06/05 11:50
Lua面向对象概念
- Lua面向对象概念
- 表中的方法
- 复制表
- 伪构造
- 伪继承
- 伪重写
- 闭包
1.表中的方法
在Lua的表中,存储的值可以是一个方法。
info = {}info.uid = function() print("9206")endinfo.uid()
2.复制表
这里,用一个遍历的方式将一个表格进行复制。
info = {}info.uid = function() print("9206")endfunction cloneTable(table) local temp = {} for key, var in pairs(table) do temp[key] = var end return tempendlocal newInfo = cloneTable(info)newInfo.uid()
3.伪“构造”
先介绍两个Lua语法:
..
:表示字符串连接。
x:函数()
:默认把x传进函数里。
info = {}info.uid = function(newInfo) print("9206:"..newInfo.name)endfunction cloneTable(table) local temp = {} for key, var in pairs(table) do temp[key] = var end return tempendinfo.new = function (name) local self = {} self = cloneTable(info) self.name = name return selfendlocal newInfo = info.new("CaMnter")newInfo:uid()
4.伪“继承”
info = {}info.uid = function(newInfo) print("9206:"..newInfo.name)endfunction cloneTable(table) local temp = {} for key, var in pairs(table) do temp[key] = var end return tempendinfo.new = function (name) local self = {} self = cloneTable(info) self.name = name return selfendfunction extend(child,super) for key, var in pairs(super) do child[key] = var endendmsg = {1,2,3}msg.new = function(name) local temp = info.new(name) extend(temp,msg) return tempendlocal m = msg.new("m-CaMnter")m:uid()
这里,先定义了一个msg
表格,然后以上述“构造函数”的方式写了一个new
构造函数,然后调用info.new(name)
构造函数将实例好的info对象传入自定义的extend
函数中进行值的复制,最后完成伪“继承”。
5.伪“重写”
跟上面的代码一样,就加了一个msg方法的重写。
info = {}info.uid = function(newInfo) print("9206:"..newInfo.name)endfunction cloneTable(table) local temp = {} for key, var in pairs(table) do temp[key] = var end return tempendinfo.new = function (name) local self = {} self = cloneTable(info) self.name = name return selfendfunction extend(child,super) for key, var in pairs(super) do child[key] = var endendmsg = {1,2,3}msg.new = function(name) local temp = info.new(name) extend(temp,msg) return tempendmsg.uid = function(self) print("msg uid:9206 "..self.name)endlocal m = msg.new("m-CaMnter")m.uid(m)
6.闭包
闭包,我的理解就是引用了局部变量的函数。这个被引用的变量将会被外部以这个函数为入口所调用。就相当于Java
中的private
属性要设置setter
和getter
方法一样。
function info(name) local object = {} object.name = name object.getName = function() print(object.name) end return objectendfunction message(name) local object = info(name) object.getName = function() print("message:"..object.name) end return objectendlocal m = message("CaMnter")for key, var in pairs(m) do print(key,var)endprint("********************************")m:getName()
这里,因为方法message中定义了一个info类型的局部变量object
,如果直接m.name调用,LDT会直接提示错误,这是就相当于写了getter
的方法getName函数来获取obejct。
0 0
- 4.Lua面向对象概念
- Lua中的面向对象概念
- Lua中 面向对象 概念和 class相关
- 【Lua】Lua之面向对象
- LUA 面向对象
- LUA面向对象浅析
- Lua 面向对象实现
- lua 面向对象
- Lua 面向对象
- Lua面向对象
- lua 面向对象编程
- lua面向对象
- lua实现面向对象
- lua面向对象思想
- lua 面向对象使用
- Lua的面向对象
- lua实现面向对象
- Lua面向对象
- 不是有效的win32应用程序
- Uva - 673 - Parentheses Balance
- 有向图的强连通分量的Tarjan算法
- EditText_多行显示、ImageView扩大触及面积
- UITableview group模式 出现的问题
- 4.Lua面向对象概念
- Android开发框架AndBase
- objective-c中关于类型编码的解释
- 【Unity3d】在Unity3d中调用外部程序及批处理文件,写自动化编译脚本需要注意的地方
- Unicode汉字编码表
- osgearth中文乱码问题
- 一个有意思的题-小猴子下落
- Activity A启动Activity B的回调过程
- hdu 1053 (huffman coding, greedy algorithm, std::partition, std::priority_queue )