①建立乙個全域性表(稱之為元表)
②設定這個元表的__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.01function 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...