'setmetatable' 的错误参数 #2(预期为零或 table)?

bad argument #2 to 'setmetatable' (nil or table expected)?

我目前正在使用我正在创建的 Corona 应用程序解决这个问题。

我的文件结构如下: 应用 -> 类 -> 对象 -> 船舶

App 文件夹中有 main.lua、menu.lua、level.lua 和 Class.lua。在 类 文件夹中有 Object.lua。在 Objects 中,ship.lua 最后在 Ships 中是我的不同船只,即玩家和敌人。

我遵循了 this tutorial 并且我的代码几乎与他的代码完全相同(酒吧玩家和敌人 类),但在 Class.lua is[=14] 中仍然收到此错误=]

"bad argument #2 to 'setetatable'(nil or table expected)"

我收到错误的代码是

function Class(Super)
  Super = Super or Base
  local prototype = setmetatable({}, Super) -- receive error here
  prototype.class = prototype
  prototype.super = Super
  prototype.__index = prototype
  return prototype
end

Base = Class()

function Base:new(...)
  local instance = setmetatable({}, self)
  instance:initialize(...)
  return instance
end

function Base:initialize() end

function Base:get()
  local Instances = self.Instances
  if (not Instances[1]) then local obj = self:new() end
  return table.remove(Instances, 1)
end

function Base:dispose()
  table.insert(self.Instances, self)
end

我试过更改 类 并将 "setmetatable({},Super)" 更改为“setmetatable(Super, self)”,将所有 类 放在一个文件中,我已经阅读了lua 文档,需要在 mai、菜单和 level.lua 等中使用 Class.lua,但没有任何效果。

如有任何帮助,我们将不胜感激。

谢谢

function Class(Super)
  Super = Super or Base
  local prototype = setmetatable({}, Super) -- receive error here
  prototype.class = prototype
  prototype.super = Super
  prototype.__index = prototype
  return prototype
end

Base = Class()

按照上面的代码执行。

您声明一个函数 Class 然后调用它(并将其返回值赋给 Base)。

逐步执行 Base = Class() 行中的 Class

function Class(Super)

该函数接受一个名为 Super

的参数
Super = Super or Base

通过使用默认值 Base,您允许 Super 参数为 nil/unpassed。 此调用 Base = Class() 未传递值,因此此行 Super = Super or Base 具有 Super 作为 nil 因此评估为 Super = nil or Base 然而全局 Base nil 因为它还没有分配给所以你得到 Super = nil.

local prototype = setmetatable({}, Super)

此行然后尝试使用 Super(从之前的行分配),正如我们刚刚看到的那样,它只是 nil 因此您的错误。

教程中您错过(或至少在您发布的代码段中错过)的部分是 至关重要 local Base上方 Class 函数定义。