Lua程式設計(三)物件導向實現乙個簡單的類

2021-08-22 12:17:24 字數 1908 閱讀 2831

①建立乙個全域性表(稱之為元表)

②設定這個元表的__index值(值通常為元表自己,這樣就能通過__index查詢到對應的屬性和方法)__index 賦值其實是乙個function的語法糖,sharp.__index = sharp等價於sharp.__index = function(key) return sharp[key] end 

③新建乙個表,使用setmetatable方法將元表設定到這個新錶中,那這個新錶就能以物件的方式來呼叫對應的屬性和方法了,當這個物件呼叫屬性或者函式時,首先查詢自身的元表,如果找到則返回;如果沒找到,則檢查元表中是否有__index,如果有,則使用__index的值繼續查詢,直到沒有__index為止。

①** 

sharp =   --①  父類

function sharp:

new()

local new_sharp =

self.__index = self --②,self ==sharp

setmetatable(new_sharp, self) --③

return

new_sharp

endfunction sharp:sharp_func()

print(

"sharp call sharp_func")

endfunction sharp:name()

print(

"sharp call name")

endfunction sharp:val()

print(

string.format("

sharp call val %d

", self._val))

end

②呼叫**

local sharp = sharp:new

()sharp:sharp_func()

sharp:name()

sharp:val()

③輸出結果

endlocal _m = new_tab(0, 54) --① 父類

_m._version = '

0.01

'function _m:

new()

local new_obj ={}

self.__index = self --②,self ==_m

setmetatable(new_obj, self)

return

new_obj

end--定義個簡單的方法

function _m:func()

print(

"function func ")

endreturn _m

簡單的呼叫

local class01 = require "

class1

"print(

"_version ==

"..class01._version)

local func =class01:func()

print(func)

列印結果

_version == 0.01

function func

nil

C 程式設計雜談之三 物件導向(續)

class fighter 上面的類可以清楚的抽象出我們所需要表達的資料型別之一,這裡也許你已經發現了一些問題 成員函式hit用來處理戰鬥事件,但是我們有不同的角色,fighter不可能只跟自己同樣的對手作戰,我們希望它能和任何角色戰鬥,當然,使用模板函式可以簡單的解決這個問題。另外,我們必須去實現...

C 程式設計雜談之三 物件導向(續)

c 程式設計雜談之三 物件導向 續 xulion class fighter 上面的類可以清楚的抽象出我們所需要表達的資料型別之一,這裡也許你已經發現了一些問題 成員函式hit用來處理戰鬥事件,但是我們有不同的角色,fighter不可能只跟自己同樣的對手作戰,我們希望它能和任何角色戰鬥,當然,使用模...

Lua物件導向程式設計之基礎結構table簡例

物件導向程式設計 object oriented programming是一種非常流行的計算機程式設計架構。lua中最基本的結構是table,所以需要用table來描述物件的屬性。lua中的function可以用來表示方法。那麼lua中的類可以通過table function模擬出來。簡例 czhe...