[轉]Lua中的物件導向實現方法

來源:互聯網
上載者:User

標籤: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.