標籤: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 insend --[[ 複製表 第一參數是目標表,第二個參數是需要複製的表 通過遍曆tab來取值將它賦值到目標表中]]function copy(dist,tab) for key, var in pairs(tab) do dist[key] = var endend -- 定義一張空表,相當於一個類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 selfend --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 selfend 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 selfend --執行個體化一個對象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 selfend local m = Man("Lisi")--m:sayHello()m:sayHi() |
以上兩種方式均可實現物件導向,目測第二種方法更為簡潔一些,具體使用按照個人的喜好來做。
原文連結:http://cn.cocos2d-x.org/tutorial/show?id=1133