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視窗,並將當前目錄...