最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Lua中類的實(shí)現(xiàn)

 更新時(shí)間:2015年04月10日 09:51:18   投稿:hebedich  
Lua中沒有類的概念,但我們可以利用Lua本身的語言特性來實(shí)現(xiàn)類。 下文將詳細(xì)的解釋在Lua中實(shí)現(xiàn)類的原理

概述

     一個(gè)類就是像是一個(gè)創(chuàng)建對象的模具,對于Lua這種沒有類的概念的語言,為了模擬類,方法是為要?jiǎng)?chuàng)建的對象制定一個(gè)原型(prototype)。這個(gè)原型相當(dāng)于其他語言中的類。但是原型同時(shí)也是一種常規(guī)的對象,當(dāng)其他的對象(看成是原型的實(shí)例)遇到一個(gè)未知的操作時(shí),就會去原型中查找。因此,在Lua這種沒有類的語言中,為了表示一個(gè)類,只需創(chuàng)建一個(gè)專用作其他對象的原型。類和原型都是一種組織對象間共享行為的方式。本文將在Lua中模擬類,相關(guān)的代碼可以在我的github上直接運(yùn)行。

 實(shí)現(xiàn)

 在Lua中要模擬類比較關(guān)鍵的地方就是class的繼承機(jī)制,以及class實(shí)例化的過程,這個(gè)過程的主要是用了元表技術(shù)以及是否把方法拷貝到子類或?qū)嵗校ㄈ艨截悾瑒t增加了數(shù)據(jù)冗余,并且喪失了父類更新子類也會自動(dòng)更新的特性,若不拷貝,則每次訪問父類方法,由于使用元表,都會代碼額外的開銷),下面是一種實(shí)現(xiàn)方法:

clsObject = { 
__ClassType = "class type" 
} 
                                                     
function clsObject:Inherit(o)   
  o = o or {} 
o.__ClassType = "class type" 
  o.mt = { __index = o} 
  setmetatable(o, {__index = self}) 
  return o 
end 
 
function clsObject:New(...) 
  local o = {} 
 
  setmetatable(o, self.mt) 
 
  if o.__init__ then 
    o:__init__(...) 
  end  
  return o 
end 
 
function clsObject:__init__() 
end 
 
function clsObject:Destroy() 
end 
 
function clsObject:GetType() 
  return "BaseClass" 
end 

上面,不管在繼承機(jī)制還是實(shí)例化的過程,都是使用了元表技術(shù),這樣做符合class繼承的思想。另外還上面的實(shí)現(xiàn),還可以實(shí)現(xiàn)工具函數(shù):獲取一個(gè)class的父類和判斷一個(gè)class是否是子類或是對象是否改類的實(shí)例,代碼如下:

function Super(TmpClass) 
  return getmetatable(TmpClass).__index 
end 
 
function IsSub(clsSub, clsAncestor) 
  local Temp = clsSub 
  while 1 do 
    local mt = getmetatable(Temp) 
    if mt then 
      Temp = mt.__index 
      if Temp == clsAncestor then 
        return true 
      end  
    else 
      return false 
    end  
  end  
end 

可以按下面實(shí)例代碼來使用這個(gè)類

clsParent = clsObject:Inherit() 
 
function clsParent:Foo() 
  print("ParentFoo!") 
end 
 
local ParentObj = clsParent:New() 
ParentObj:Foo() 
 
 
clsSon = clsParent:Inherit() 
function clsSon:Foo() 
  Super(clsSon).Foo(self) 
  print("SonFoo") 
end 
 
local SonObj = clsSon:Inherit() 
SonObj:Foo() 
 
print(IsSub(clsSon, clsParent)) 
print(IsSub(clsSon, clsObject)) 

以上所述就是本文的全部內(nèi)容了,希望能夠?qū)Υ蠹沂炀氄莆誰ua腳本有所幫助。

相關(guān)文章

  • 深入解讀Lua中迭代器與泛型for的使用

    深入解讀Lua中迭代器與泛型for的使用

    在Lua中,迭代器常被寫為函數(shù)而被調(diào)用返回下一個(gè)元素,而for循環(huán)調(diào)用迭代器函數(shù)則使得迭代更強(qiáng)強(qiáng)大,下面我們就來深入解讀Lua中迭代器與泛型for
    2016-06-06
  • Lua的協(xié)程(coroutine)簡介

    Lua的協(xié)程(coroutine)簡介

    這篇文章主要介紹了Lua的協(xié)程(coroutine)簡介,本文講解了coroutine的創(chuàng)建、協(xié)程的三種狀態(tài)和yield函數(shù)的配合使用等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua面向?qū)ο笾惡屠^承淺析

    Lua面向?qū)ο笾惡屠^承淺析

    這篇文章主要介紹了Lua面向?qū)ο笾惡屠^承淺析,本文講解了一些Lua面向?qū)ο蟮囊恍┲R,需要的朋友可以參考下
    2014-09-09
  • Lua中的元表(metatable)、元方法(metamethod)詳解

    Lua中的元表(metatable)、元方法(metamethod)詳解

    這篇文章主要介紹了Lua中的元表(metatable)、元方法(metamethod)詳解,本文對它做了詳細(xì)講解,并給出實(shí)例來說明,需要的朋友可以參考下
    2014-09-09
  • Lua中簡單的錯(cuò)誤處理實(shí)例

    Lua中簡單的錯(cuò)誤處理實(shí)例

    這篇文章主要介紹了Lua中簡單的錯(cuò)誤處理實(shí)例,本文講解了Lua錯(cuò)誤處理中的error、assert、pcall等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Lua中使用table.concat連接大量字符串實(shí)例

    Lua中使用table.concat連接大量字符串實(shí)例

    這篇文章主要介紹了Lua中使用table.concat連接大量字符串實(shí)例,本文是Lua處理大量字符串的一個(gè)測試文章,測試了2種方法處理大量字符串的消耗時(shí)間,需要的朋友可以參考下
    2014-09-09
  • Lua與C語言間的交互實(shí)例

    Lua與C語言間的交互實(shí)例

    這篇文章主要介紹了Lua與C語言間的交互實(shí)例,本文主要講解了Lua中調(diào)用C語言的方法和例子,需要的朋友可以參考下
    2014-12-12
  • Lua教程(二):基礎(chǔ)知識、類型與值介紹

    Lua教程(二):基礎(chǔ)知識、類型與值介紹

    這篇文章主要介紹了Lua教程(二):基礎(chǔ)知識、類型與值介紹,本文講解了Hello World程序、代碼規(guī)范、全局變量、類型與值等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua中操作字符串的基本方法整理

    Lua中操作字符串的基本方法整理

    這篇文章主要介紹了Lua中操作字符串的基本方法整理,是Lua入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • 分析Lua觀察者模式最佳實(shí)踐之構(gòu)建事件分發(fā)系統(tǒng)

    分析Lua觀察者模式最佳實(shí)踐之構(gòu)建事件分發(fā)系統(tǒng)

    當(dāng)對象間存在一對多關(guān)系時(shí),則使用觀察者模式(Observer Pattern)。比如,當(dāng)一個(gè)對象被修改時(shí),則會自動(dòng)通知依賴它的對象。觀察者模式屬于行為型模式
    2021-06-06

最新評論

隆安县| 武山县| 桐梓县| 什邡市| 聂拉木县| 开原市| 大连市| 汤阴县| 申扎县| 余江县| 乐东| 江口县| 彭山县| 富蕴县| 克东县| 南雄市| 郎溪县| 孟连| 开封县| 长宁县| 会同县| 上思县| 武安市| 德保县| 鄢陵县| 建瓯市| 措美县| 博兴县| 华安县| 永昌县| 嘉兴市| 宾川县| 政和县| 化州市| 汪清县| 金昌市| 绥滨县| 锡林浩特市| 凯里市| 民勤县| 呼和浩特市|