老程序员分享:lua类实现

简介: 老程序员分享:lua类实现

"

_Account = {}

--创建一张借记卡

function _Account:new( tb )

local _Tb = tb or {}

_Tb._mBalance = _Tb._mBalance or 0

setmetatable(_Tb, self)

self.__index = self

return _Tb

end

--借记卡取款

function _Account:desposit( value )

if value > self._mBalance then

print(string.format(""取款""..value .. ""失败, 剩余存款"" .. self._mBalance))

return

end

self._mBalance = self._mBalance - value

print(string.format(""取款""..value .. "", 剩余存款"" .. self._mBalance))

end

--存钱

function //代码效果参考:https://v.youku.com/v_show/id_XNjQwMDEzNzY0NA==.html

_Account:addBalance(val)

local num = val or 0

self._mBalance = self._mBalance + num

print(""存钱""..val)

end

--【【

信用卡也具备储蓄卡的存取功能,所以直接继承储蓄卡,复用储蓄卡的存钱功能。

我们在访问一个表不存在的域时,lua解释器会去查找metatable中是否有__index方法(metamethod),如果不存在则返回nil。

_Credit是_Account:new出来的,metatable是_Account,__index也是_Account,所以当_Credit对象访问addBalance的时候,

会到_Account中找。

】】

_Credit = _Account:new({_mLimit = 1000})

--信用卡取款

function _Credit:desposit( value )

if value > self._mBalance + self._mLimit then

print(string.format(""取款""..value .. ""失败, 剩余额度"" .. self._mLimit .. "", 剩余存款""..self._mBalance))

return

end

if self._mBalance >= value then

self._mBalance = self._mBalance - value

else

self._mLimit = self._mLimit - (value - self._mBalance)

self._mBalance = 0

end

print(string.format(""取款""..value .. "", 剩余额度"" .. self._mLimit .. "", 剩余存款""..self._mBalance))

end

print("" --储蓄卡--"")

local myAccount_2 = _Account:new()

myAccount_2:addBalance(1000)

myAccount_2:desposit(200)

myAccount_2:desposit(2000)

print(""\n //代码效果参考:https://v.youku.com/v_show/id_XNjQwMDEzNzY2MA==.html

--信用卡--"")

local cyCredit = _Credit:new()

cyCredit:addBalance(600)

cyCredit:desposit(500)

cyCredit:desposit(500)

cyCredit:desposit(1000)

--【【结果

--储蓄卡--

存钱1000

取款200, 剩余存款800

取款2000失败, 剩余存款800

--信用卡--

存钱600

取款500, 剩余额度1000, 剩余存款100

取款500, 剩余额度600, 剩余存款0

取款1000失败, 剩余额度600, 剩余存款0

】】


"
image.png
相关文章
|
2月前
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
Lua的面向对象编程、协同线程与协同函数的概念和使用,以及Lua文件I/O操作的基本方法。
37 4
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
|
6月前
|
程序员
老程序员分享:Lua的unpack
老程序员分享:Lua的unpack
196 0
|
6月前
|
C++
2dx lua自定义类
2dx lua自定义类
Lua程序设计(三)面向对象实现一个简单的类
1.Lua面向对象实现步骤 ①创建一个全局表(称之为元表) ②设置这个元表的__index值(值通常为元表自己,这样就能通过__index查找到对应的属性和方法)__index 赋值其实是一个function的语法糖,Sharp.
1323 0
Lua程序设计(四)面向对象类继承
1.类继承  ①代码 Sharp = { _val = 1} --① 父类 function Sharp:new() local new_sharp = { } self.__index = self --②,self == Sharp setmetatable(n...
855 0