Lua/cocos2d-lua中定义类的四中方法

=====Account Start==========
local Account = {
    balance = 0,--  withdraw = function(self,v)
   --     self.balance = self.balance - v
  --  end,}


function Account : withdraw(v)
    if v > self.balance then 
        --error "insufficient funds"
    end
    self.balance = self.balance - v
end 

 
function Account : deposit(v)
    self.balance = self.balance + v
end

function Account : new(account)
    account = account or {}
    setmetatable(account,self)
    self.__index = self

    return account
end
--=====Account End==========

--=====SpecialAccount Start==========
local SpecialAccount = Account : new()
function SpecialAccount : withdraw(v)
    if v - self.balance >= self : getLimit() then
        error "insufficient funds"
    end
    self.balance = self.balance - v
end

function SpecialAccount : getLimit()
    return self.limit
end
--=====SpecialAccount End==========


--=====NewAccount Start==========
local NewAccount = {}
function NewAccount : new(initialBalance)
    local self = {balance = initialBalance}

    local withdraw = function(v)
        self.balance = self.balance - v
    end

    local deposit = function(v)
        self.balance = self.balance + v
    end

    local getBalance = function()
        return self.balance
    end

    return {
        withdraw = withdraw,deposit = deposit,getBalance = getBalance
    }
end
--=====NewAccount End==========

--=====Test Start==========
local Test = class("Test",Account)
function Test : ctor(name)
    print("get a name:",name)
end

function Test : print()
    print("I'm test class's print function",self.balance)
end
--=====Test End==========
local t = Test : new()
t : withdraw(100)
t : print()


local acc1 = NewAccount : new(100)
acc1.withdraw(40)
print("NewAccount余额",acc1.getBalance())


local s = SpecialAccount : new({limit = 1000})
s : withdraw(200)


local MainScene = class("MainScene",cc.load("mvc").ViewBase)

function MainScene:onCreate()
    -- add background image
    display.newSprite("MainSceneBg.jpg")
        :move(display.center)
        :addTo(self)

    -- add play button
    local playButton = cc.MenuItemImage:create("PlayButton.png","PlayButton.png")
        :onClicked(function(sender)
            --self:getApp():enterScene("PlayScene")
             --local layer = cc.TestLayer:create()
            -- layer:myPrint("哈哈")

            local a1 = Account : new({balance = 0})
         --   a1:deposit(100)
            --a1.deposit(a1,100)
           -- getmetatable(a1).__index.deposit(a1,100)
           -- Account.deposit(a1,100)
           --a1 : withdraw(100)
            print("余额:",a1.balance)

        end)


    cc.Menu:create(playButton)
        :move(display.cx,display.cy - 200)
        :addTo(self)
end

return MainScene

相关文章

1.github代码实践源代码是lua脚本语言,下载th之后运行thmai...
此文为搬运帖,原帖地址https://www.cnblogs.com/zwywilliam/...
Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能...
localfunctiongenerate_action(params)localscale_action=cc...
2022年1月11日13:57:45 官方:https://opm.openresty.org/官...
在Lua中的table(表),就像c#中的HashMap(哈希表),key和...