標籤:http 使用 os strong io for re c
物件導向不是針對某一門語言,而是一種思想,在面向過程的語言也可以使用物件導向的思想來進行編程。在Lua中,並沒有物件導向的概念存在,沒有類的定義和子類的定義,但同樣在Lua中可以利用物件導向的思想來實現物件導向的類繼承。
一、複製表的方式物件導向
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
--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() |
以上代碼已經有詳細的注釋,讀者需要仔細閱讀這裡所給出的例子。
二、使用函數閉包的形式實現物件導向
123456789101112131415161718192021222324252627282930313233343536373839404142 |
--以函數閉包的形式實現物件導向 --定義一個方法,函數閉包實現一個類的概念 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