Lua script déclenche une erreur “tentative d'appeler une valeur nulle (champ "dépôt")”

J'ai ce script Lua, qui est censé créer une nouvelle classe, créez une instance et l'appel des fonctions, mais il y a une erreur dans laquelle je appeler les méthodes.

Account = {
    balance = 0,
    new = function(self,o)
        o = o or {}
        setmetatable(o,self)
        self.__index = self
        return o
    end,
    deposit = function(self,money)
        self.balance = self.balance +  money
    end,
    withdraw = function(self,money)
        self.balance = self.balance - money
    end

}
new_account = Account.new()
print(new_account.balance)
new_account.deposit(23)
new_account.deposit(1)
print(new_account.balance)

Il garde lancer cette erreur:

attempt to call a nil value (field 'deposit') 

Il semble que ça fonctionne comme ceci:

Account = {
    balance = 0,
}

function Account:new(o)
    o = o or {}
    setmetatable(o,self)
    self.__index = self
    return o
end

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

function Account:withdraw(money)
    self.balance = self.balance - money
end

function Account:get_balance()
    return self.balance
end


acc = Account:new({})

print(acc.balance)

acc:deposit(1920)

print(acc:get_balance())

Je ne semble pas obtenir ce qui est mauvais. C'est peut-être le ':' opérateur qui fonctionne uniquement?

OriginalL'auteur phriol | 2016-04-18