csdn學習筆記 lua繼承 自索引

2021-08-28 18:33:06 字數 3135 閱讀 6536

lua中類是物件,物件也是物件

物件:所謂的物件,即屬性和方法。

相c/c++一樣使用類來訪問屬性和方法

shape = ;

-- shape._getarea = function(self)

-- return self._width * self._height;

-- end

--只能這樣定義,不然不能使用shape:_getarea()訪問引數

function shape:_getarea() --這樣定義就可以象40行一樣呼叫 --print(shape:_getarea());

return self._width * self._height;

enda = shape;

--print(shape:_getarea());

--print(shape._getarea(shape));

print(a:_getarea()); --這樣呼叫就和c++類一樣了

所謂的自索引,即將元表中的__index方法指向元表本身,可以省卻一張額外的表

mt = ;

mt.__index = mt; ----自索引,__index引用在外部引用自己就可以使用了

t = setmetatable({},mt);

print(t.x);

這裡存在乙個self的問題,當訪問表乙個不存在鍵時,會呼叫元表__index鍵,把新鍵新增到self中去,而不是新增到元表中

-----繼承

account =

function account:new(o)

o = o or {};

setmetatable(o,self);

self.__index = self;

return o;

end----存款函式

function account:deposit(v)

self.balance = self.balance + v;

end----取款函式

function account:withdraw(v)

self.balance = self.balance - v;

endcreditaccount = account:new();

creditaccount:deposit(1000)

creditaccount:withdraw(1000)

父類子類

-----繼承

account =

function account:new(o)

o = o or {};

setmetatable(o,self);

self.__index = self;

return o;

end----存款函式

function account:deposit(v)

self.balance = self.balance + v;

end----取款函式

function account:withdraw(v)

self.balance = self.balance - v;

endcreditaccount = account:new(); ----這裡新類誕生了(lua物件就是類,類就是物件)

function creditaccount:disbalance()

print(self.balance);

endfunction creditaccount:withdraw(v) -----普通卡提款

if v <= self.balance then

self.balance = self.balance - v;

else

print("no such money");

endendcredit = creditaccount:new(); ----新類產生了物件

credit:deposit(1000); ----存錢1000

credit:withdraw(999);

credit:disbalance();

信用卡提款透支

-----繼承

account =

function account:new(o)

o = o or {};

setmetatable(o,self);

self.__index = self;

return o;

end----存款函式

function account:deposit(v)

self.balance = self.balance + v;

end----取款函式

function account:withdraw(v)

self.balance = self.balance - v;

endcreditaccount = account:new(); ----這裡新類誕生了(lua物件就是類,類就是物件)

function creditaccount:disbalance()

print(self.balance);

endfunction creditaccount:getlimit()

return self.limit;

endfunction creditaccount:withdraw(v) -------信用卡提款

if self.balance + self.limit >= v then

self.balance = self.balance + self.limit - v;

else

print("defit");

endendcredit = creditaccount:new(); ----新類產生了物件

credit:deposit(1000); ----存錢1000

credit:withdraw(999);

credit:disbalance();

學習筆記 lua中基於原型的繼承

如何建立乙個基類 如何利用基類建立乙個例項 如何用基類派生乙個子類 如何用子類建立乙個例項 print 基於原型的繼承 理解為基類 robort function robort getid return self.id endfunction robort setid id self.id id e...

Lua學習筆記 lua堆疊

首先了解一下c 與lua之間的通訊 假設在乙個lua檔案中有如下定義 hello.lua檔案 請注意紅色數字,代表通訊順序 1 c 想獲取lua的myname字串的值,所以它把myname放到lua堆疊 棧頂 以便lua能看到 2 lua從堆疊 棧頂 中獲取myname,此時棧頂再次變為空 3 lu...

lua學習筆記

近日時間比較充裕,學習一下lua語言,順便寫下筆記,方便以後加深學習。c c 呼叫lua動態庫及標頭檔案位址 用於c c 嵌入lua指令碼解析 也可以到或找適合自己的版本。一 hello world 哈哈,先使用經典的hello world帶進門 1.在 執行 鍵入cmd開啟dos視窗,並將當前目錄...