Lua語言物件導向學習記錄一

2021-08-16 07:17:50 字數 2264 閱讀 3903

1、元表目的:

對兩個table進行操作,從而改變table的行為

栗子: 為了實現 使 表a和表b中元素互相加起來

lua先檢查任一表 是否有 元表;

接著檢查是否有「_add」字段;

_add為 即時字段 對應著乙個函式或者表, 我們稱其對應的字段為元方法 鍵

處理 元表 的函式

1、setmetatable(table,metatable) // 對指定table設定元表,如果元表中_metatable即時欄位的值,則函式會設定失敗

2、getmetatable(table) //返回物件的元表

栗子:

test_table={}  //普通的表

test_metatable={} //元表(空鍵值)

setmetatable(test_table,test_metatable) //把test_metatable設定成test_table的元素

或者直接寫成

test_table=setmetatable({},{})
getmetatable(test_table)

//返回值為test_metatable

3、常用的元方法

當_index元方法是函式的時候:

當碰上以下的情況

local t=

print(t

local mt=

setmetatable(t,mt);

print(t[money]); //當呼叫了不存在的money欄位時,就會呼叫table元表裡的__index元方法,並且會傳遞table和欄位名兩個引數。

輸出:

未檢測到您要搜尋的字段:money

nil

元方法是table的時候

local t=

local mt=

}setmetatable(t,mt);

print(t[money]);

輸出:

900,000
我們給_index賦值了乙個table,其中table有 下標為money的元素900000;

那麼,當呼叫t的某個不存在的字段時,就會去查詢__index裡的table,如果找到這個字段,就呼叫它。即以下步驟

1.在表中查詢,如果找到,返回該元素,找不到則繼續

2.判斷該錶是否有元表,如果沒有元表,返回nil,有元表則繼續。

3.判斷元表有沒有__index方法,如果__index方法為nil,則返回nil;如果__index方法是乙個表,則重複1、2、3;如果__index方法是乙個函式,則返回該函式的返回值。

由_index元方法到繼承

local person=

local t1={};

local t2={};

local mt=

setmetatable(t1, mt);

setmetatable(t2, mt);

print(t1[money]);

t2.speak(); //不知道可不可以寫成t2[speak()]

這裡很容易理解 上述的繼承關係了: t1和t2繼承了mt的屬性!!!

_newindex方法用於對錶的更新操作(_index用於對錶的訪問);

當要給表中缺少的索引賦值時,直譯器首先就會查詢_newindex方法;

栗子:

mt={};

t=setmetatable(,);

print(t[key1]); //value1

t[key2]="value2"

print(t[key2],mt[key2]); //nil , value2

t[key1]="v";

print(t[key1],mt[key1]); // v,nil

以上例項中表設定了元方法 __newindex,在對新索引鍵(key2)賦值時(t.key2 = 「value2」),會呼叫元方法,而不進行賦值。而如果對已存在的索引鍵(key1),則會進行賦值,而不呼叫元方法 __newindex

Lua學習 物件導向

在菜鳥教程學習lua物件導向時有以下 meta class shape 基礎類方法 new function shape new o,side o o or setmetatable o,self self.index self side side or 0 self.area side side ...

物件導向學習記錄 一

首先得說說的經歷,我是乙個嵌入式軟體開發工程師,屬於偏底層的軟體工作。大多是直接和硬體打交道。比如微控制器啊,arm啊等等。所以在我的心裡,面向過程的是思想是根深蒂固的。在沒有接觸物件導向以前,總覺得面向過程是最好的,對物件導向是嗤之以鼻的。但在工作的過程中,慢慢的發現了c不能解決的問題,就是重用性...

lua物件導向

直接貼 參考的也是別人的,只不過其中幾點,增加一點自己的理解 local baseclass print baseclass是 tostring baseclass 定義index屬性,指向本身 baseclass.index baseclass 定義建構函式 function baseclass ...