Lua 中實現物件導向
這裡提供 Lua 中實現
OO 的一種方案:
現在,我們來看看怎麼使用:
以上是基本的 class 定義的語法,完全相容 lua 的程式設計習慣。我增加了一個叫做 ctor 的詞,作為建構函式的名字。
下面看看怎樣繼承:
現在可以試一下了:
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 ,這個函式被過載了。
相關文章
- Lua學習(二)物件導向物件
- Javascript實現物件導向繼承JavaScript物件繼承
- JavaScript物件導向—繼承的實現JavaScript物件繼承
- 物件導向-物件導向思想物件
- java物件導向(中)Java物件
- 在Lua中實現Rust物件的繫結Rust物件
- php中的程式導向與物件導向PHP物件
- Golang 中的物件導向Golang物件
- Go物件導向程式設計OOP的實現Go物件程式設計OOP
- “程序導向”和“物件導向”物件
- 物件導向與程式導向物件
- 程式導向與物件導向物件
- JavaScript 物件導向實戰思想JavaScript物件
- 物件導向物件
- 物件導向,搞定物件物件
- JAVA物件導向基礎--物件導向介紹Java物件
- PHP 物件導向 (九)物件導向三大特徵PHP物件特徵
- Go 面試官問我如何實現物件導向?Go面試物件
- [寫作中...]Js物件導向(2): 建立物件JS物件
- JS 中的物件導向 prototype classJS物件
- Python物件導向Python物件
- [Java物件導向]Java物件
- Java物件導向Java物件
- Python 物件導向Python物件
- Java — 物件導向Java物件
- Python——物件導向Python物件
- 物件導向--下物件
- scala物件導向物件
- 物件導向(下)物件
- 物件導向(上)物件
- PHP物件導向PHP物件
- 物件導向 -- 反射物件反射
- JavaScript 物件導向JavaScript物件
- JS物件導向JS物件
- 物件導向(oop)物件OOP
- python-程式導向、物件導向、類Python物件
- 50.C++物件模型的分析(上)(C語言實現物件導向特性)C++物件模型C語言
- 夯實Java:從物件導向說起Java物件
- day08 Go中的物件導向Go物件