1. ホーム
  2. oop

[解決済み] Lua スクリプトがエラー "nil値(フィールド 'deposit')を呼び出そうとした" をスローします。

2022-02-17 19:09:58

質問事項

このLuaスクリプトは、新しいクラスを作成し、インスタンスを作成し、関数を呼び出すことになっているのですが、実際にメソッドを呼び出すとエラーが発生するんです。

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)

このエラーを出し続けています。

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

このように動作するようです。

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

何が間違っているのか分からないようです。もしかして、':' 演算子しか使えないのでしょうか?

解決方法は?

そうです。 : を使用してメソッドを呼び出すことができます。

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

Account:new() は砂糖です。 Account.new(Account) など。