亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Lua中實現面向對象的一種漂亮解決方案

2024-07-21 23:04:22
字體:
來源:轉載
供稿:網友

在 pil 中,lua 的作者推薦了一種方案來實現 OO,比較簡潔,但是我依然覺得有些繁瑣。

這里給出一種更漂亮一點的解決方案,見下文:

這里提供 Lua 中實現 OO 的一種方案:

復制代碼 代碼如下:

local _class={}
 
function class(super)
 local class_type={}
 class_type.ctor=false
 class_type.super=super
 class_type.new=function(...)
   local obj={}
   do
    local create
    create = function(c,...)
     if c.super then
      create(c.super,...)
     end
     if c.ctor then
      c.ctor(obj,...)
     end
    end
 
    create(class_type,...)
   end
   setmetatable(obj,{ __index=_class[class_type] })
   return obj
  end
 local vtbl={}
 _class[class_type]=vtbl
 
 setmetatable(class_type,{__newindex=
  function(t,k,v)
   vtbl[k]=v
  end
 })
 
 if super then
  setmetatable(vtbl,{__index=
   function(t,k)
    local ret=_class[super][k]
    vtbl[k]=ret
    return ret
   end
  })
 end
 
 return class_type
end

 

現在,我們來看看怎么使用:
base_type=class()  -- 定義一個基類 base_type

復制代碼 代碼如下:

function base_type:ctor(x) -- 定義 base_type 的構造函數
 print("base_type ctor")
 self.x=x
end
 
function base_type:print_x() -- 定義一個成員函數 base_type:print_x
 print(self.x)
end
 
function base_type:hello() -- 定義另一個成員函數 base_type:hello
 print("hello base_type")
end

以上是基本的 class 定義的語法,完全兼容 lua 的編程習慣。我增加了一個叫做 ctor 的詞,作為構造函數的名字。
下面看看怎樣繼承:
復制代碼 代碼如下:

test=class(base_type) -- 定義一個類 test 繼承于 base_type
 
function test:ctor() -- 定義 test 的構造函數
 print("test ctor")
end
 
function test:hello() -- 重載 base_type:hello 為 test:hello
 print("hello test")
end

現在可以試一下了:
復制代碼 代碼如下:

a=test.new(1) -- 輸出兩行,base_type ctor 和 test ctor 。這個對象被正確的構造了。
a:print_x() -- 輸出 1 ,這個是基類 base_type 中的成員函數。
a:hello() -- 輸出 hello test ,這個函數被重載了。

 

在這個方案中,只定義了一個函數 class(super) ,用這個函數,我們就可以方便的在 lua 中定義類:

復制代碼 代碼如下:

base_type=class()       -- 定義一個基類 base_type

 

function base_type:ctor(x)  -- 定義 base_type 的構造函數
    print("base_type ctor")
    self.x=x
end

function base_type:print_x()    -- 定義一個成員函數 base_type:print_x
    print(self.x)
end

function base_type:hello()  -- 定義另一個成員函數 base_type:hello
    print("hello base_type")
end


以上是基本的 class 定義的語法,完全兼容 lua 的編程習慣。我增加了一個叫做 ctor 的詞,作為構造函數的名字。

 

下面看看怎樣繼承: test=class(basetype) -- 定義一個類 test 繼承于 basetype

復制代碼 代碼如下:

function test:ctor()    -- 定義 test 的構造函數
    print("test ctor")
end

 

function test:hello()   -- 重載 base_type:hello 為 test:hello
    print("hello test")
end


現在可以試一下了:
復制代碼 代碼如下:

a=test.new(1)   -- 輸出兩行,base_type ctor 和 test ctor 。這個對象被正確的構造了。
a:print_x() -- 輸出 1 ,這個是基類 base_type 中的成員函數。
a:hello()   -- 輸出 hello test ,這個函數被重載了。

其實,實現多重繼承也并不復雜,這里就不再展開了。更有意義的擴展可能是增加一個 dtor :)

 

ps. 這里用了點小技巧,將 self 綁定到 closure 上,所以并不使用 a:hello 而是直接用 a.hello 調用成員函數。這個技巧并不非常有用,從效率角度上說,還是不用為好。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
狠狠色狠狠色综合日日小说| 国产精品视频精品视频| 国产精品美女网站| 亚洲新声在线观看| 久久噜噜噜精品国产亚洲综合| 亚洲欧美日韩中文在线| 成人免费大片黄在线播放| 欧美日韩午夜视频在线观看| 亚洲黄一区二区| 九九综合九九综合| 一本大道香蕉久在线播放29| 欧美激情国产高清| 5278欧美一区二区三区| 国产精品女主播| 欧美片一区二区三区| 欧美重口另类videos人妖| 久久激情五月丁香伊人| 日韩**中文字幕毛片| 国产精品香蕉国产| 久久成人精品一区二区三区| 国产精品xxx视频| 国语自产精品视频在免费| 国产一区二区av| 日韩欧美亚洲范冰冰与中字| 国产精品白嫩初高中害羞小美女| 国产成人在线视频| 69av在线视频| 91精品国产色综合久久不卡98口| 91禁外国网站| 欧美成人黄色小视频| 狠狠躁夜夜躁久久躁别揉| 日韩在线www| 亚洲成人久久久| 国产91av在线| 亚洲三级av在线| 色综合91久久精品中文字幕| 91色琪琪电影亚洲精品久久| 日韩有码在线电影| 91av在线免费观看| 久久99国产精品自在自在app| 精品久久久久人成| 亚洲国产美女久久久久| 4k岛国日韩精品**专区| 亚洲人成电影网| 欧美另类极品videosbestfree| 911国产网站尤物在线观看| 国产精品嫩草视频| 亚洲美女中文字幕| 亚洲美女又黄又爽在线观看| 日韩欧美一区二区在线| 国产v综合v亚洲欧美久久| 91麻豆国产语对白在线观看| 日韩免费视频在线观看| 欧美午夜影院在线视频| 亚洲 日韩 国产第一| 自拍偷拍亚洲精品| 欧美大学生性色视频| 久久中文字幕在线视频| 午夜精品久久久久久久99热| 亚洲国产精品va在线看黑人动漫| 国产综合久久久久久| 亚洲韩国日本中文字幕| 一区二区三区四区精品| 国产欧洲精品视频| 91视频8mav| 欧美老女人在线视频| 黑人精品xxx一区一二区| 欧亚精品在线观看| 欧美激情视频免费观看| 久久偷看各类女兵18女厕嘘嘘| 欧美乱大交做爰xxxⅹ性3| 欧美激情中文网| 第一福利永久视频精品| 上原亚衣av一区二区三区| 俺去亚洲欧洲欧美日韩| 亚洲黄一区二区| 亚洲精品国产精品自产a区红杏吧| 欧美高清电影在线看| 欧美日韩国产999| 精品免费在线观看| 81精品国产乱码久久久久久| 午夜精品久久久久久99热软件| 两个人的视频www国产精品| 精品电影在线观看| 丰满岳妇乱一区二区三区| 国产亚洲精品va在线观看| 国产mv久久久| 亚洲性生活视频| xxxxx成人.com| 国产精品中文字幕在线观看| 成人免费看片视频| 久久天堂av综合合色| 欧美另类在线观看| 国产女同一区二区| 日本三级久久久| 久久91亚洲人成电影网站| 久久久精品影院| 国产成人精品综合久久久| 久久精品国产亚洲精品| 久久精品国产91精品亚洲| 91性高湖久久久久久久久_久久99| 国产精品免费视频xxxx| 日产精品99久久久久久| 亚洲精品电影在线观看| 亚洲精品欧美日韩| 日韩av电影中文字幕| 亚洲第一av在线| 国产精品久久久久久久app| 欧美成年人在线观看| 亚洲欧美日韩中文视频| 日韩资源在线观看| 欧美午夜激情在线| 自拍偷拍亚洲区| 欧美成人亚洲成人| 成人伊人精品色xxxx视频| 亚洲男人的天堂在线播放| 久久香蕉频线观| 亚洲欧美国产日韩天堂区| 97视频国产在线| 久久精品福利视频| 国产日韩精品在线观看| 久久香蕉国产线看观看av| 久久99精品国产99久久6尤物| 亚洲人成网站色ww在线| 午夜精品久久久久久久99热| 91亚洲精华国产精华| 在线激情影院一区| 日韩av免费观影| 国产精品香蕉在线观看| 国产欧美日韩视频| 性欧美视频videos6一9| 亚洲人成人99网站| 日韩av电影手机在线| 欧美亚洲午夜视频在线观看| 亚洲精选在线观看| 91免费在线视频网站| 正在播放欧美视频| 性视频1819p久久| 欧美肥臀大乳一区二区免费视频| 亚洲图片在线综合| 亚洲国产精品热久久| 日韩精品视频在线观看免费| 精品国内亚洲在观看18黄| 欧美一级大片在线观看| 日本成人精品在线| 九九久久综合网站| 亚洲男人天堂视频| 色偷偷888欧美精品久久久| 亚洲国产婷婷香蕉久久久久久| 国产精品第3页| 视频在线观看一区二区| 欧美日韩高清在线观看| 中文字幕亚洲国产| 91在线网站视频| 日韩国产在线播放| 国产精品久久久久久久电影| 国产在线观看精品| 色悠悠久久久久| 亚洲精品aⅴ中文字幕乱码| 日韩av在线免费观看一区| 国产一区二区丝袜高跟鞋图片| 日韩一区二区三区xxxx| 久久亚洲国产精品| 亚洲女同性videos|