2016-04-18 16 views
2

Ich habe dieses Lua-Skript, das eine neue Klasse erstellen soll, eine Instanz erstellen und Funktionen aufrufen soll, aber es gibt einen Fehler in dem ich rufen Sie tatsächlich die Methoden auf.Lua-Skript wirft Fehler "Versuch, einen Nullwert (Feld 'Einzahlung') aufzurufen"

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) 

Es hält werfen diesen Fehler:

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

Es scheint, wie dies funktioniert:

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()) 

Ich scheine nicht zu falsch, was ist. Vielleicht ist es der ':' Operator, der nur funktioniert?

Antwort

4

Ja, Sie brauchen : verwenden Methoden aufrufen:

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

Account:new() Zucker ist für Account.new(Account) usw.