'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
函数定义。
我目前正在使用我正在创建的 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
函数定义。