【问题标题】:attempt to index global 'BankAccount' (a function value)尝试索引全局“BankAccount”(函数值)
【发布时间】:2020-04-08 18:14:00
【问题描述】:

我是 Lua 新手,所以在 lua 代码中创建和访问类时。我收到以下错误

尝试索引全局“BankAccount”(一个函数值)

下面的代码块供参考。

-- lua 中的类

-- bank account is a table

BankAccount = {
  account_number = 0,
  holder_name = "",
  balance = 0.0
}

function BankAccount:deposit(amount)
  self.balance = self.balance + amount
end

function BankAccount(amount)
  self.balance = self.balance - amount
end

function BankAccount:new(t)
  t = t or {}
  setmetatable(t,self)
  self.__index= self
  return t
end
-- instantiate an object of the class BankAccount

johns_account = BankAccount:new({
  account_number = 12345678,
  holder_name = "John",
  balance = 0.0
})

print(johns_account.account_number)

谁能解释我犯了什么错误或我遗漏了什么?

【问题讨论】:

  • 下次打开你的脚本问问自己,为什么Lua认为BankAccount指的是一个函数值。搜索单词 BankAccount。你的第一个命中将是:BankAccount = {}so 它指的是一个表,稍后你会发现function BankAccount(amount) end 等同于BankAccount = function(amount) end 所以哇,现在BankAccount 指的是一个函数值!这里出了点问题,你不是故意的。那么缺少什么?当出现错误时,请始终检查与该错误相关的变量是否具有它们应该具有的值并找出原因
  • @Piglet 感谢您的评论。我明白了这个错误。 ☺

标签: function class oop lua lua-table


【解决方案1】:

function BankAccount(amount) 行将BankAccount 重新定义为一个函数。

该行应该是function BankAccount:withdraw(amount)

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 2020-03-08
    • 2013-09-04
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    相关资源
    最近更新 更多