首页 > 代码库 > [转]Lua中的面向对象实现方法
[转]Lua中的面向对象实现方法
面向对象不是针对某一门语言,而是一种思想,在面向过程的语言也可以使用面向对象的思想来进行编程。在Lua中,并没有面向对象的概念存在,没有类的定义和子类的定义,但同样在Lua中可以利用面向对象的思想来实现面向对象的类继承。
一、复制表的方式面向对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | --Lua中的面向对象 --[[ 复制表方式面向对象 参数为一张表,通过遍历这张表取值,赋给一张空表,最后返回新建的表,来达到克隆表 ]] function clone(tab) local ins = {} for key, var in pairs(tab) do ins[key] = var end return ins end --[[ 复制表 第一参数是目标表,第二个参数是需要复制的表 通过遍历tab来取值将它赋值到目标表中 ]] function copy(dist,tab) for key, var in pairs(tab) do dist[key] = var end end -- 定义一张空表,相当于一个类 People ={} --function People.sayHi() -- print( "People say hi" ) --end -- 定义类中的方法sayHi,传入一个self参数 People.sayHi = function (self) print( "People say hi:" ..self.name) end -- 定义一个 new 方法,传进一个name参数,通过克隆People这张表来生成一个对象 -- 相当于类当中的一个构造方法 People. new = function (name) local self = clone(People) self.name = name return self end --local p = clone(People) --p.sayHi() --生成一个新的对象 local p = People. new ( "ZhangSan" ) --p.sayHi(p) --p:sayHi() --定义一张空表,也代表一个类 Man = {} --Man中的构造方法,实现Lua中类的继承 Man. new = function (name) local self = People. new (name) --附加Man中所有的键值对到People中的实例中去 copy(self,Man) return self end Man.sayHello = function () print( "Man say hello" ) end --重写父类People中的sayHi方法 Man.sayHi = function (self) print( "Man sayHi " ..self.name) end --创建Man的一个实例 local m = Man. new ( "Lisi" ) m:sayHi() |
以上代码已经有详细的注释,读者需要仔细阅读这里所给出的例子。
二、使用函数闭包的形式实现面向对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | --以函数闭包的形式实现面向对象 --定义一个方法,函数闭包实现一个类的概念 function People(name) local self = {} --初始化方法,私有的 local function init() self.name = name end self.sayHi = function () print( "Hello " ..self.name) end --调用初始化 init() return self end --实例化一个对象 local p = People( "ZhangSan" ) p:sayHi() --函数闭包的形式实现类继承 function Man(name) local self = People(name) -- local function init() -- -- end self.sayHello = function () print( "Hi " ..self.name) end return self end local m = Man( "Lisi" ) --m:sayHello() m:sayHi() |
以上两种方式均可实现面向对象,目测第二种方法更为简洁一些,具体使用按照个人的喜好来做。
原文链接:http://cn.cocos2d-x.org/tutorial/show?id=1133
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。