Oop 错误的参数#2到';可设置图元';(零或预期的表格)?
目前,我正在开发一款corona应用程序 我的文件结构如下: 应用程序->类->对象->船舶 应用程序文件夹中有main.lua、menu.lua、level.lua和Class.lua。在Classes文件夹中有Object.lua。在对象中,ship.lua和最后在Ships中是我的不同船舶,即玩家和敌人 我遵循了,我的代码几乎与他的(bar player和enemys类)完全相同,但仍然在类中收到此错误。lua是 “错误参数#2到‘setetable’(应为nil或table)” 我收到的错误代码是Oop 错误的参数#2到';可设置图元';(零或预期的表格)?,oop,lua,coronasdk,Oop,Lua,Coronasdk,目前,我正在开发一款corona应用程序 我的文件结构如下: 应用程序->类->对象->船舶 应用程序文件夹中有main.lua、menu.lua、level.lua和Class.lua。在Classes文件夹中有Object.lua。在对象中,ship.lua和最后在Ships中是我的不同船舶,即玩家和敌人 我遵循了,我的代码几乎与他的(bar player和enemys类)完全相同,但仍然在类中收到此错误。lua是 “错误参数#2到‘setetable’(应为nil或table)” 我收到的
函数类(超级)
超级=超级或基本
本地原型=setmetatable({},Super)--此处接收错误
prototype.class=原型
prototype.super=super
原型。索引=原型
返回原型
结束
基=类()
函数库:新的(…)
本地实例=setmetatable({},self)
实例:初始化(…)
返回实例
结束
函数基:initialize()结束
函数库:get()
本地实例=self.Instances
如果(不是实例[1]),则本地obj=self:new()结束
返回表。删除(实例,1)
结束
函数库:dispose()
表.insert(self.Instances,self)
结束
按照上面代码的执行
声明一个函数Class
,然后调用它(并将其返回值赋给Base
)
从Base=Class()
行逐步执行Class
function Class(Super)
该函数接受一个名为Super
Super = Super or Base
通过使用默认值Base
,允许Super
参数为nil/未通过。
此调用Base=Class()
未传递值,因此此行Super=Super或Base
将Super
作为nil
,因此计算结果为Super=nil或Base
,但是全局Base
也是nil,因为它尚未被分配,所以您得到Super=nil
local prototype = setmetatable({}, Super)
然后,这一行尝试使用Super
(从前面的那一行分配),但正如我们刚才看到的那样,nil
因此是您的错误
你错过了教程中的一点(或者至少在你发布的代码片段中错过了),那就是
类函数定义上方的极为重要的
行。你能澄清为什么会出现错误(预期为零或表)
当参数Super
为nil
时。当使用nil
元表调用setmetatable
时,Lua是否应该删除任何分配的元表并返回该表。。。是的,nil
应该可以。我想知道你把Base
分配给了什么。试着把它打印出来print(type(Super),Super)
就在setmetatable
行的上方?非常好的建议。可能Base
是OP没有发布的代码中的某个全局(不是表)。感谢您的回复,@Adam I在类顶部的local Base
行中添加了该错误@我打印了你建议的,结果是nil-nil
,表格:05F884A8
,然后是Boolean-true
,因为有几个类继承自这个类。我很高兴你弄明白了这一点,但我认为这个问题可能应该删除。如书面所示,我的回答是错误的,并且问题没有包含足够的信息来诊断问题。您可以在问题中添加有关打印调试和触发打印调试的行的信息,而不是删除,如果您需要,我可以更新我的答案以匹配。
local prototype = setmetatable({}, Super)